4 ポイント 投稿者 emusal 2026-03-22 | 4件のコメント | WhatsAppで共有

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件のコメント

 
nokdu 2026-03-22

Windowsには対応していないのでしょうか? (涙)

 
emusal 2026-03-22

Windows環境がないので試していません

 
runableapp 2026-03-22

使用時のスクリーンショットがあるとよいですね。

 
emusal 2026-03-22

READMEにスクリーンショットを追加しました。アドバイスありがとうございます。