NotionSSH - ควบคุมเซิร์ฟเวอร์ระยะไกลด้วย Notion ได้โดยไม่ต้องใช้ VPN
(github.com/mirseo)เวลาพัฒนา บางครั้งด้วยเหตุผลด้านความปลอดภัยจึงมีบางที่ที่อนุญาตให้ใช้ http/https กับบางเว็บไซต์ได้ แต่ไม่เปิดให้ใช้ SSH หรือ RDP
ก็เลยลองทำขึ้นมาครับ
มันเป็นโปรเจกต์ชื่อ NotionSSH ที่เมื่อพิมพ์ใน Notion ว่า “!(docker ps)”
โปรแกรม Rust แบบเรียบง่ายนี้จะไปรันคำสั่งผ่าน shell บนเครื่องที่กำลังมอนิเตอร์หน้านั้นอยู่ แล้วส่งผลลัพธ์กลับมา
ตอนนี้ยังเป็นเวอร์ชันเริ่มต้นอยู่ เลยอาจมีบั๊กได้เยอะ
ฝากลองใช้งานกันเยอะ ๆ นะครับ!
34 ความคิดเห็น
ขออภัยที่ตอบช้าครับ!
ผมรู้สึกผิดมากครับ เป็นเรื่องที่ดีที่โปรเจ็กต์แรกที่ผมพัฒนาอย่างจริงจังเพื่อจุดประสงค์โอเพนซอร์สได้รับความสนใจ แต่ดูเหมือนว่าผมจะรู้สึกกลัวจากการถูกทักท้วงเข้ามามากเกินไปผ่านอีเมลส่วนตัวและ SNS ภายนอกอื่น ๆ หลายช่องทาง
ด้วยเหตุนี้ ผมจึงตัดสินใจอย่างรีบเร่งเปลี่ยนโปรเจ็กต์เป็นแบบไม่เปิดเผยเป็นเวลา 3 วัน
ผมขอโทษอย่างจริงใจที่ทำให้ทุกคนผิดหวังจากการตัดสินใจที่หุนหันพลันแล่นของผม
ผมจะถือว่าเหตุการณ์ครั้งนี้เป็นประสบการณ์ที่ดี และจะพัฒนาโปรเจ็กต์โอเพนซอร์สต่อไปในอนาคต ขอบคุณครับ!!
ยังมี remote desktop gateway ที่ชื่อว่า guacamole ด้วย (https://guacamole.apache.org/)
ขออภัยที่ตอบช้านะครับ!
ก่อนหน้านี้เคยใช้งานอยู่ แต่ด้วยข้อจำกัดของ VNC ความเร็วค่อนข้างช้า เลยได้รับผลกระทบจากอาการหน่วงและดีเลย์พอสมควร
ก็เลยสร้างมันขึ้นมาระหว่างกำลังคิดหาวิธีใหม่มาใช้แทน ขอบคุณครับ!!
ปี 2025 | พัฒนา NotionSSH (2.0) ซึ่งเป็น SSH bridge ที่พัฒนาด้วย Rust (https://github.com/mirseo/notionSSH) <- ไม่รองรับแล้วและถูกลบไปแล้ว
คุณเขียนไว้แบบนั้นนะครับ... ดูเหมือนว่าควรตอบกลับที่นี่หรือลบข่าวน่าจะดีกว่า
ขออภัยที่ตอบช้าครับ!
ช่วงนี้มีคนทักท้วงเรื่องความปลอดภัยเข้ามาค่อนข้างมาก เลยทำให้ผมคิดหนักว่าจะควรเปิดเผยเรโปนี้ต่อไปหรือไม่
จึงได้เปลี่ยนเป็นสถานะส่วนตัวแบบไม่ได้แจ้งล่วงหน้า
ต้องขออภัยจริง ๆ ที่ทำให้ผิดหวังจากการตัดสินใจที่หุนหันของผม ต่อไปผมจะพัฒนาตัวเองให้เป็นนักพัฒนาที่ดียิ่งขึ้น ขอบคุณครับ
ตอนนี้กำลังวางแผนตารางการพัฒนาเพิ่มเติมอยู่ และได้เปิดเป็นสาธารณะอีกครั้งแล้ว ขอบคุณสำหรับความคิดเห็นดี ๆ ครับ!!
มีนักพัฒนาหลายท่านได้พูดถึงเรื่องความปลอดภัยและทิปต่าง ๆ และเมื่อคอมเมนต์มีเกิน 27 รายการ ผมก็คิดว่าโพสต์นี้ไม่ใช่แค่โพสต์ของผมคนเดียวอีกต่อไป...
แต่ถ้ามีปุ่มลบโพสต์ ก็ถือเป็นเสรีภาพของเจ้าของโพสต์เองสินะ 555
ผมไม่เคยโพสต์มาก่อนเลย เลยสงสัยว่าสามารถลบได้ไหม
ขออภัยที่ตอบช้าครับ!
จริง ๆ เคยคิดจะลบโพสต์นี้อยู่ แต่หา ปุ่มลบ ไม่เจอ เลยเหมือนปล่อยทิ้งไว้แบบนั้น…
ขออภัยครับ
ในเมื่อทุกคนได้แสดงความคิดเห็นกันแล้ว แต่กลับตัดสินใจคนเดียวทั้งที่มันไม่ใช่แค่โพสต์ของผม คิดว่าผมคงตัดสินใจเร็วเกินไปครับ
แล้วก็ผมกลัวด้วยครับ เพิ่งเริ่มเข้ามาในคอมมูนิตี้ได้ไม่นาน แต่ก็ได้รับคำเตือนผ่านหลายแพลตฟอร์มและอีเมลอย่างต่อเนื่องว่าโปรเจกต์นี้มีความเสี่ยงด้านความปลอดภัยสูงมาก.. สภาพจิตใจเลยสั่นคลอนไปมาก ขอโทษครับ
ทำไมถึงเข้าถึงรีโพซิทอรีไม่ได้
ต้องขออภัยที่อัปเดตช้านะครับ!!
ช่วงนี้มีการทักท้วงเรื่องปัญหาด้านความปลอดภัยอยู่มาก เลยทำให้ผมคิดหนักว่าจะเปิดเผยรีโพซิทอรีนี้ต่อไปดีหรือไม่
และได้เปลี่ยนเป็นแบบไม่เปิดเผยชั่วคราวโดยไม่ได้แจ้งล่วงหน้า
ต้องขออภัยอย่างยิ่งที่การตัดสินใจอย่างรีบร้อนของผมทำให้ทุกคนผิดหวัง ต่อจากนี้ผมจะพัฒนาตัวเองให้เป็นนักพัฒนาที่ดียิ่งขึ้น ขอบคุณครับ
ถ้า SSH ใช้งานไม่ได้เพราะเปิดพอร์ต 22 ไม่ได้ ก็มีวิธีอย่างการเปลี่ยนพอร์ต SSH หรือใช้ Cloudflare Tunnel ได้เหมือนกัน
จริงครับ! แต่ที่ที่ผมทำงานอยู่บล็อกตัวโปรโตคอล ssh ด้วยไฟร์วอลล์เลยเป็นแบบนั้นครับ
ผมก็ลองทั้ง Cf tunnel กับ tailscale แล้ว แต่เขาบอกว่าอาจเข้าข่ายผิดระเบียบ ก็เลยใช้ external shell แบบปลอดภัยอยู่ครับ :) (พอไปถามเรื่องระเบียบ ทีมความปลอดภัยของมหาวิทยาลัยบอกว่าอนุมัติขาเข้า/ขาออกเฉพาะ http/https บน 80, 443 เท่านั้น)
ที่จริงก็สามารถขออนุมัติได้อยู่ แต่ขั้นตอนค่อนข้างยุ่งยากและกฎระเบียบที่เกี่ยวข้องก็ซับซ้อน เลยทำวิธีนี้ขึ้นมาครับ
ถ้าผมอยู่ทีมความปลอดภัย ผมคงบล็อกสิ่งนี้ทันทีที่รู้เข้า...
ยิ่งถ้ามีกระบวนการและสามารถขออนุมัติได้อยู่แล้ว แต่ยังอ้อมหลบขั้นตอนอีก ก็ยิ่งควรถูกบล็อกมากขึ้นไปอีก
เราเรียกสิ่งนี้ว่า Shadow IT
ก็จริงครับ มันอาจเป็นแบบนั้นได้
แต่จุดประสงค์ที่ทำสิ่งนี้ขึ้นมาจริง ๆ ไม่ได้ทำเพื่อเอาไปใช้งานจริงเท่าไรนัก แค่คิดว่าถ้ามีอะไรแบบนี้ก็น่าสนใจดี!
ก็เลยลองทำเป็นโปรเจกต์ข้าง ๆ ดูครับ!!
พูดอย่างเคร่งครัด มันก็คือ RCE นั่นแหละครับ อันตรายมากนะครับ แบบนี้เท่ากับว่าไม่มีการตรวจสอบเพื่อความปลอดภัยเลยไม่ใช่เหรอ? มันคือเอเจนต์ที่รันอยู่บนเซิร์ฟเวอร์คอยรันคำสั่งจากเพจภายนอกเป็นระยะ ๆ และในตอนนั้นก็คือเชื่อถือเพจภายนอกแบบไม่มีเงื่อนไขโดยไม่ตรวจสอบอะไรเลย ถึงจะใช้ Notion API ก็ตาม เอ่อ... อันตรายจริง ๆ ครับ
เพิ่มอุปกรณ์ความปลอดภัยแล้ว!
การตรวจสอบ CA - โครงสร้าง 3 ขั้นตอน: 1. ตรวจสอบ certificate chain ของ CA, 2. ตรวจสอบ DNS แบบ DoH ( cf, google ), 3. certificate pinning (ตรวจสอบ public key)
เพิ่ม ACL (เพิ่มการควบคุมสิทธิ์การใช้คำสั่งตามบัญชีสิทธิ์ของอีเมลผู้ใช้ + เพิ่มการควบคุมสิทธิ์ตามทีม)
บล็อกคำสั่งที่ไม่มีอยู่ใน Allow เป็นค่าเริ่มต้น
อืม.. จริงครับ
ตอนนี้ยังเป็นเวอร์ชันเริ่มต้นอยู่ ดังนั้นในเวอร์ชันถัดไปเราวางแผนจะเพิ่มฟีเจอร์ที่บล็อกการทำงานโดยอิงจากชื่อบัญชี
(ตั้งใจจะจำกัดบัญชีที่สามารถรันได้โดยใช้ชื่อบัญชีที่ได้จาก NotionAPI และตัวแปรสภาพแวดล้อมของระบบ พร้อมทั้งเพิ่มชั้นสิทธิ์เข้าไปด้วย!!)
ดูเหมือนว่าการเสริมความปลอดภัยจะเป็นจุดสำคัญครับ!!
มีสิ่งที่ผมยังไม่ค่อยเข้าใจเลยอยากถามครับ
นอกจากนั้น ผมมองว่าเป้าหมายของ SSH เองคือการเข้าถึงเชลล์อย่างปลอดภัย ดังนั้นถ้าใช้วิธีนี้ การเข้าถึงเชลล์ก็ยังปลอดภัยอยู่ เพราะเป็นโครงสร้างแบบ (เซิร์ฟเวอร์ - เซิร์ฟเวอร์ของ Notion - ผู้ใช้) ก็เลยตั้งชื่อให้มีคำว่า SSH ครับ!
อืม.. ก็จริงครับ ที่จริงเดิมทีเป็นโปรเจกต์ที่อิงกับการแลกเปลี่ยนคีย์ แต่ระหว่างพัฒนาได้เปลี่ยนมาใช้ให้ Notion Page เป็นตัวอ่านแทนครับ
เพราะการให้ผู้ใช้ต้องแลกเปลี่ยนคีย์และยืนยันตัวตน ทั้งมีความยากในการพัฒนา และก็ไม่ค่อยเหมาะกับ Notion ด้วยครับ
(เวอร์ชันเริ่มต้นก่อน 1.0 ที่ยังไม่เปิดเผย - เวอร์ชันนี้ใช้วิธีแลกเปลี่ยนคีย์และทำไว้สำหรับ Discord แต่ไม่สะดวกเลยทำให้ผมเลิกใช้ไปเอง อีกทั้งด้วยลักษณะของรหัสผ่านก็ค่อนข้างไม่เหมาะจะเปิดเผยบน Notion ด้วย)
ขอบคุณสำหรับความเห็นดี ๆ ครับ! ชื่อโปรเจกต์อาจจะมีการเปลี่ยนในภายหลังก็ได้ครับ
เป็นโปรเจ็กต์ที่น่าสนใจมากนะครับ มีเหตุผลอะไรเป็นพิเศษไหมที่เลือกใช้ Notion?
ใช่ครับ! จริง ๆ แล้วผมได้ยินมาว่าในงานจริงมีการใช้ Notion กันเยอะ และในกรณีของผมเองก็ใช้มันเพื่ออัปโหลดและจัดระเบียบข้อมูล เลยเลือกใช้ Notion
ส่วน Discord, อีเมล และ Slack ผมรู้สึกว่าน่าจะไม่สะดวกทั้งในแง่การใช้ API และการรองรับ code block บนสภาพแวดล้อมจอภาพ เลยมีส่วนที่ทำให้เลือกใช้ Notion เหมือนกันครับ!
นอกจากนี้ ในแง่ของการแชร์ผลการทำงานและเมื่อมองโดยยึดบริษัทเป็นศูนย์กลาง ก็มีเหตุผลที่เลือก Notion ซึ่งสะดวกต่อการทำงานร่วมกัน เพื่อให้ทีมไอทีของบริษัทสามารถเข้ามาช่วยแก้ปัญหาได้อย่างรวดเร็วเมื่อมีการสนับสนุนจากทีมออกแบบเป็นต้น
คุณคำนึงถึงกรณีใช้งานจริงด้วยนะครับ แต่ในกรณีการเชื่อมต่อ ssh บางส่วนจะใช้งานได้เฉพาะในเครือข่ายปิดเท่านั้น จึงไม่สามารถเชื่อมต่ออินเทอร์เน็ตได้ ทำให้น่าจะไม่สามารถใช้ Notion ได้ T_T
อ๊ะ... ส่วนนั้นผมนึกไม่ถึงเลย
จริงๆ แล้วถ้าเป็นเซิร์ฟเวอร์ที่ความปลอดภัยสำคัญ วิธีแบบนี้คงสู้การใช้ something อย่าง tailscale ไม่ได้และน่าจะปลอดภัยกว่าครับ!!
ขอบคุณสำหรับความเห็นดีๆ ครับ!!
เอ๊ะ.. ตอนเช้าผมโพสต์จากมือถือระหว่างไปโรงเรียน เลยไม่รู้เลยว่ามีคำพิมพ์ผิดด้วย
ขอให้ทุกคนมีวันที่ดีนะ :)
เมื่อก่อนตอนลองเล่นแฮ็กกิ้งกับ Hacker School เคยเห็นว่ามีบอกว่าเว็บเชลล์เป็นช่องโหว่ความปลอดภัยขนาดใหญ่เลย......
นี่เล่นเป็น Notion Shell อีก ฝ่ายดูแลความปลอดภัยคงเป็นลมกันพอดี
อาฮาฮัต... ฟังก์ชันที่สะดวกก็มาพร้อมกับ trade-off ในระดับนั้นเหมือนกัน.. (...)
อืม.. มันอาจจะทำงานคล้าย web shell ก็ได้นะครับ
แต่ในแง่ความปลอดภัยก็ยังมีการเก็บล็อกไว้.. ถ้ามีล็อกหลงเหลืออยู่ก็อาจจะตรวจจับได้เหมือนกัน..?
เหมือนจะเอาไปใช้เป็น web shell ได้ด้วย แต่ผมไม่เคยรู้มาก่อนเลย
ขอบคุณที่บอกนะครับ!!
!(rm -rf /)
ในเวอร์ชันล่าสุดได้เพิ่มฟีเจอร์ด้านความปลอดภัยเข้ามาแล้ว!
มีการเพิ่ม ACL ทำให้ในสถานะการตั้งค่าความปลอดภัย คำสั่งอย่าง
rmจะถูกบล็อกเป็นค่าเริ่มต้น!อ๊ะ... อันนี้คงต้องจำกัดสิทธิ์แล้วสินะ..?
เวอร์ชันถัดไปอาจต้องเพิ่ม SecureConfig...
ขอบคุณที่แจ้งมาครับ!!
ไอเดียน่าสนุกดีนะ 555
https://crates.io/crates/iroh-ssh/0.1.1 แบบนี้ก็มีเหมือนกัน
โอ้โห... น่าสนใจมากเลยนะ?! เห็นอันนี้แล้วคงต้องลองปรับปรุงต่ออีกหน่อยแล้ว
เวอร์ชันที่กำลังคิดอยู่ตอนนี้คืออยากลองใส่ฟีเจอร์ P2P เข้าไปใน notionSSH
บังเอิญมาได้รู้จักของดีพอดี ขอบคุณครับ :)