2P by emusal 9시간전 | ★ favorite | 댓글 1개

2000년대 초부터 개인용 SSH 자동화 도구를 Bash + Expect 스크립트로 만들어 써왔습니다.
20년간 패치하다가 결국 Go로 완전히 재작성해서 오픈소스로 공개했습니다.

https://github.com/emusal/alogin2

핵심 문제 의식: 수십 대 서버를 사용자, 포트, 게이트웨이 경로, 자격증명이
제각각인 상태로 관리할 때 — 호스트명을 매번 전부 타이핑하거나 비밀번호를
평문으로 저장하지 않고 편하게 쓰고 싶었습니다.

주요 기능:

  • TUI (Bubbletea) 퍼지 검색 — 호스트명 전부 안 쳐도 됩니다
  • Go 네이티브 SSH로 멀티홉 게이트웨이 구현 (ProxyCommand 없음, expect 없음).
    중간 홉에서 AllowTcpForwarding이 꺼져 있으면 셸 체이닝으로 자동 폴백
  • 암호화 자격증명 저장 — 비밀번호는 macOS Keychain / Linux Secret Service /
    age 암호화 파일에 보관. SQLite DB에는 절대 기록되지 않음
  • 클러스터 세션 — tmux, iTerm2, Terminal.app으로 N대 서버에 동시 접속
  • Web UI — WebSocket 기반 xterm.js 터미널 + 서버 관리 대시보드 (alogin web)
  • 셸 심(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할 수 있어서
별도 프로세스 없이 N홉 체이닝이 가능합니다. 까다로웠던 건 중간 배스천이
TCP 포워딩을 막고 있을 때 — dial 도중 실패를 감지하고 셸 체이닝 방식으로
전환하는 폴백 로직이었습니다.

구현 관련 질문이나 피드백 환영합니다.

사용 스크린샷이 있으면 좋겠습니다.