alogin – TUI、マルチホップゲートウェイ、暗号化ストレージを備えたSSH接続管理ツール (Go)
(github.com/emusal)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 コマンドを 1 行の source でそのまま利用可能
使用スタック: Go 1.23、Bubbletea、golang.org/x/crypto/ssh、chi、xterm.js (React)
実装中に最も興味深かった部分はマルチホップ SSH でした。
golang.org/x/crypto/ssh では既存セッション上で次のホップへ dial できるため、
別プロセスなしで N ホップのチェイニングが可能です。厄介だったのは、中継バスティオンが
TCP フォワーディングを禁止しているときで、dial 中の失敗を検知してシェルチェイニング方式へ
切り替えるフォールバックロジックでした。
実装に関する質問やフィードバックを歓迎します。
4件のコメント
Windowsには対応していないのでしょうか? (涙)
Windows環境がないので試していません
使用時のスクリーンショットがあるとよいですね。
READMEにスクリーンショットを追加しました。アドバイスありがとうございます。