alogin – alat manajemen koneksi SSH dengan TUI, gateway multi-hop, dan penyimpanan terenkripsi (Go)
(github.com/emusal)Sejak awal 2000-an saya membuat dan memakai alat otomatisasi SSH pribadi dengan skrip Bash + Expect.
Setelah menambalnya selama 20 tahun, akhirnya saya menulis ulang sepenuhnya dengan Go dan merilisnya sebagai open source.
https://github.com/emusal/alogin2
Masalah utama yang ingin diselesaikan: saat mengelola puluhan server dengan pengguna, port, jalur gateway, dan kredensial yang semuanya berbeda-beda — saya ingin menggunakannya dengan nyaman tanpa harus mengetik nama host lengkap setiap saat atau menyimpan kata sandi dalam bentuk teks polos.
Fitur utama:
- TUI (Bubbletea) dengan pencarian fuzzy — tidak perlu mengetik seluruh nama host
- Implementasi gateway multi-hop dengan SSH native Go (
ProxyCommandtidak ada, tanpa expect).
JikaAllowTcpForwardingdimatikan pada hop perantara, otomatis fallback ke shell chaining - Penyimpanan kredensial terenkripsi — kata sandi disimpan di macOS Keychain / Linux Secret Service /
file terenkripsi age. Tidak pernah dicatat ke DB SQLite - Sesi cluster — koneksi serentak ke N server dengan tmux, iTerm2, Terminal.app
- Web UI — terminal xterm.js berbasis WebSocket + dashboard manajemen server (
alogin web) - Shell shim — perintah
t,r,s,f,mdari skrip lama bisa tetap dipakai hanya dengan satu barissource
Stack yang digunakan: Go 1.23, Bubbletea, golang.org/x/crypto/ssh, chi, xterm.js (React)
Bagian paling menarik saat implementasi adalah SSH multi-hop.
golang.org/x/crypto/ssh memungkinkan hop berikutnya di-dial di atas sesi yang sudah ada, sehingga chaining N-hop bisa dilakukan tanpa proses terpisah. Yang paling rumit adalah saat bastion perantara memblokir TCP forwarding — mendeteksi kegagalan selama proses dial lalu menjalankan logika fallback untuk beralih ke metode shell chaining.
Pertanyaan atau masukan terkait implementasi sangat disambut.
4 komentar
Apakah belum mendukung Windows? sniff
Saya belum sempat mencobanya karena tidak punya lingkungan Windows.
Akan lebih baik jika ada tangkapan layar penggunaan.
Saya telah menambahkan tangkapan layar ke README. Terima kasih atas sarannya.