4 Punkte von emusal 2026-03-22 | 4 Kommentare | Auf WhatsApp teilen

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-Hop AllowTcpForwarding deaktiviert 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, m aus bestehenden Skripten können per einer einzigen source-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

 
nokdu 2026-03-22

Gibt es keine Windows-Unterstützung? schnief

 
emusal 2026-03-22

Ich konnte es nicht ausprobieren, weil ich keine Windows-Umgebung habe.

 
runableapp 2026-03-22

Es wäre schön, wenn es Nutzungsscreenshots gäbe.

 
emusal 2026-03-22

Ich habe dem README einen Screenshot hinzugefügt. Danke für den Hinweis.