4 คะแนน โดย emusal 2026-03-22 | 4 ความคิดเห็น | แชร์ทาง WhatsApp

ตั้งแต่ช่วงต้นทศวรรษ 2000 ผมได้สร้างและใช้งานเครื่องมือทำ SSH อัตโนมัติส่วนตัวด้วยสคริปต์ Bash + Expect มาโดยตลอด
หลังจากค่อย ๆ แพตช์มันมานาน 20 ปี ในที่สุดก็เขียนใหม่ทั้งหมดด้วย Go และเปิดซอร์สเป็นโอเพนซอร์สแล้ว

https://github.com/emusal/alogin2

แนวคิดหลักของปัญหาที่อยากแก้คือ: เมื่อจัดการเซิร์ฟเวอร์หลายสิบเครื่องที่มีผู้ใช้ พอร์ต เส้นทางเกตเวย์ และข้อมูลรับรองแตกต่างกันไปทั้งหมด — ผมอยากให้ใช้งานได้สะดวกโดยไม่ต้องพิมพ์ชื่อโฮสต์เต็มทุกครั้งหรือเก็บรหัสผ่านไว้แบบ plain text

ฟีเจอร์หลัก:

  • TUI (Bubbletea) ค้นหาแบบฟัซซี — ไม่จำเป็นต้องพิมพ์ชื่อโฮสต์ครบทั้งหมด
  • มัลติฮอปเกตเวย์ด้วย Go native SSH (ไม่มี ProxyCommand, ไม่มี expect)
    หาก AllowTcpForwarding ถูกปิดที่ฮอประหว่างทาง จะ fallback ไปใช้ shell chaining โดยอัตโนมัติ
  • ที่เก็บข้อมูลรับรองแบบเข้ารหัส — รหัสผ่านจะถูกเก็บไว้ใน macOS Keychain / Linux Secret Service /
    ไฟล์เข้ารหัส age และจะไม่ถูกบันทึกลงใน SQLite DB เด็ดขาด
  • คลัสเตอร์เซสชัน — เชื่อมต่อพร้อมกันไปยังเซิร์ฟเวอร์ N เครื่องด้วย tmux, iTerm2, Terminal.app
  • Web UI — เทอร์มินัล xterm.js บน WebSocket + แดชบอร์ดจัดการเซิร์ฟเวอร์ (alogin web)
  • shell shim — สามารถใช้คำสั่ง t, r, s, f, m จากสคริปต์เดิมต่อได้ทันทีด้วย source เพียงบรรทัดเดียว

สแตกที่ใช้: Go 1.23, Bubbletea, golang.org/x/crypto/ssh, chi, xterm.js (React)

ส่วนที่น่าสนใจที่สุดระหว่างการพัฒนาคือมัลติฮอป SSH
golang.org/x/crypto/ssh สามารถ dial ฮอปถัดไปบนเซสชันเดิมได้ จึงทำ chaining แบบ N-hop ได้โดยไม่ต้องมีโปรเซสแยก
สิ่งที่ยากคือกรณีที่ bastion ตรงกลางบล็อก TCP forwarding — ต้องตรวจจับความล้มเหลวระหว่าง dial และสลับไปใช้ตรรกะ fallback แบบ shell chaining

ยินดีรับคำถามเกี่ยวกับการพัฒนาหรือฟีดแบ็กครับ

4 ความคิดเห็น

 
nokdu 2026-03-22

รองรับ Windows ไหมครับ ฮือๆ

 
emusal 2026-03-22

ยังไม่ได้ลองเพราะไม่มีสภาพแวดล้อม Windows

 
runableapp 2026-03-22

น่าจะดีถ้ามีภาพหน้าจอการใช้งานครับ

 
emusal 2026-03-22

ผมได้เพิ่มภาพหน้าจอใน README แล้ว ขอบคุณสำหรับคำแนะนำครับ