alogin – SSH-Zugriffsverwaltung mit TUI, Multi-Hop-Gateway und verschlüsseltem Speicher (Go)
(github.com/emusal)Seit Anfang der 2000er habe ich persönliche SSH-Automatisierungstools mit Bash- + Expect-Skripten gebaut und verwendet.
Nach 20 Jahren Patchen habe ich sie schließlich komplett in Go neu geschrieben und als Open Source veröffentlicht.
https://github.com/emusal/alogin2
Das zentrale Problem: Wenn man Dutzende Server verwaltet, deren Benutzer, Ports, Gateway-Pfade und Zugangsdaten alle unterschiedlich sind, wollte ich sie bequem nutzen, ohne jedes Mal den vollständigen Hostnamen tippen oder Passwörter im Klartext speichern zu müssen.
Hauptfunktionen:
- TUI (Bubbletea) mit Fuzzy Search — der vollständige Hostname muss nicht eingetippt werden
- Multi-Hop-Gateway mit nativem SSH in Go (kein ProxyCommand, kein
expect).
Wenn auf einem Zwischen-HopAllowTcpForwardingdeaktiviert ist, erfolgt automatisch ein Fallback auf Shell-Chaining - Verschlüsselte Speicherung von Zugangsdaten — Passwörter werden in macOS Keychain / Linux Secret Service /
age-verschlüsselten Dateien abgelegt. Niemals in der SQLite-DB gespeichert - Cluster-Sessions — gleichzeitige Verbindung zu N Servern mit tmux, iTerm2, Terminal.app
- Web UI — WebSocket-basiertes xterm.js-Terminal + Server-Management-Dashboard (
alogin web) - Shell-Shim — die Befehle
t,r,s,f,maus bestehenden Skripten können per einer einzigensource-Zeile unverändert weiterverwendet werden
Verwendeter Stack: Go 1.23, Bubbletea, golang.org/x/crypto/ssh, chi, xterm.js (React)
Der interessanteste Teil der Implementierung war Multi-Hop-SSH.
golang.org/x/crypto/ssh kann den nächsten Hop über eine bestehende Session dialen, wodurch N-Hop-Chaining ohne zusätzliche Prozesse möglich ist. Knifflig war der Fall, dass ein Zwischen-Bastion-Host TCP-Forwarding blockiert — die Fallback-Logik musste einen Fehler während des dial erkennen und dann auf Shell-Chaining umschalten.
Fragen zur Implementierung oder Feedback sind willkommen.
4 Kommentare
Gibt es keine Windows-Unterstützung? schnief
Ich konnte es nicht ausprobieren, weil ich keine Windows-Umgebung habe.
Es wäre schön, wenn es Nutzungsscreenshots gäbe.
Ich habe dem README einen Screenshot hinzugefügt. Danke für den Hinweis.