Praxis-Leitfaden: Vollständige Migration von OpenSSH zu S&B NetGate (sb-ssh)
Schluss mit statischen authorized_keys: Der Umstieg auf S&B NetGate
Statische SSH-Schlüssel (id_ed25519 oder id_rsa) gehören seit Jahrzehnten zum Standardrepertoire der Systemadministration – und stellen gleichzeitig eine der größten Sicherheitslücken dar.
In typischen Entwicklungs- und Produktivumgebungen führt dies zu bekannten Problemen:
- Key-Sprawl: Niemand weiß mehr genau, welcher Entwickler welche Schlüssel auf welchen Servern in
~/.ssh/authorized_keyshinterlegt hat. - Unmögliches Offboarding: Verlässt ein Mitarbeiter oder externer Dienstleister das Unternehmen, müssen Server manuell abgesucht und bereinigt werden.
- Mangelnde Zurechenbarkeit: Logs auf Zielservern protokollieren meist nur "Accepted publickey for root", nicht aber, wer hinter dem Zugriff stand.
- Verlorene Laptops: Ein unverschlüsselter oder schwach geschützter Privatschlüssel auf einem verlorenen Laptop kompromittiert sofort das gesamte Netzwerk.
Mit S&B NetGate (sb-ssh) stellen wir eine 100% freie, quelloffene und in Rust entwickelte Alternative bereit, die diesen Key-Sprawl durch kurzlebige OpenSSH User-Zertifikate (z. B. 8 Stunden Gültigkeit) und OAuth2/OIDC-Browser-Logins ablöst.
In diesem Praxis-Leitfaden zeigen wir, wie der Umstieg innerhalb von 5 Minuten und ohne Unterbrechung bestehender Dienste gelingt.
Die 5 Migrationsschritte im Detail
Schritt 1: Bestehende Hosts & Konfigurationen importieren
Sie müssen keine Hostnamen oder IP-Adressen manuell neu tippen. sb-ssh liest Ihre bestehende ~/.ssh/config automatisch beim Start ein und überführt alle Hosts nahtlos in seinen lokalen Tresor (~/.sb-ssh/servers.toml).
Installieren und direkt starten:
cargo install --git https://github.com/Skulls-and-Bones/sb-ssh.git
sb-ssh list
sb-ssh list zeigt Ihnen alle importierten Server — inklusive Hosts, Ports, Benutzer und ProxyJump-Kaskaden aus Ihrer ~/.ssh/config. Server, die Sie manuell hinzufügen möchten:
sb-ssh add prod-web-01 192.168.1.10 --user root --port 22 --tags "prod,web"
Keine Downtime: Ihre bestehenden Private Keys und Zertifikate funktionieren während der gesamten Umstellungsphase transparent weiter —
sb-sshfällt bei Bedarf automatisch auf~/.ssh/identity_filezurück.
Schritt 2: Drop-in Ersatz für System-Tools aktivieren
sb-ssh versteht alle standardmäßigen OpenSSH-Flags (-p, -i, -o, -T, -v, -q, -D, -L) und leitet non-interactive Befehle automatisch als Raw-Stream weiter.
Sie können OpenSSH daher systemweit ersetzen, ohne dass Skripte oder Tools brechen:
# Windows (PowerShell als Benutzer):
Copy-Item "$env:USERPROFILE\.cargo\bin\sb-ssh.exe" "$env:USERPROFILE\.cargo\bin\ssh.exe" -Force
# Linux / macOS:
sudo ln -sf ~/.cargo/bin/sb-ssh /usr/local/bin/ssh
Git-Transfers nahtlos absichern
Setzen Sie einfach die Umgebungsvariable GIT_SSH_COMMAND:
$env:GIT_SSH_COMMAND = "sb-ssh"
git pull origin main
Ab diesem Moment laufen Git-Operationen, CI/CD-Pipelines und sogar VS Code Remote-SSH vollkommen transparent über die hochperformante Pure-Rust SSH2-Engine.
Schritt 3: Ziel-Server schlüsselfrei machen (Zero-Key Transition)
Anstatt für jeden Benutzer Schlüssel auf dem Server zu hinterlegen, hinterlegen Sie ein einziges Mal den öffentlichen Schlüssel der S&B Certificate Authority (CA). Der CA-Key wird beim ersten Start von sb-ssh automatisch lokal generiert und liegt in ~/.sb-ssh/ca_key.pub.
- Lokal ausführen — fertige Befehle werden generiert:
sb-ssh server-init
server-init liest Ihren persönlichen CA Public Key aus ~/.sb-ssh/ca_key.pub und gibt fertig kopierbare Shell-Befehle mit Ihrem echten Key aus, z. B.:
# 1. S&B CA Public Key hinterlegen:
sudo mkdir -p /etc/ssh
echo 'ssh-ed25519 AAAAC3Nza...IHR_ECHTER_KEY S&B_NetGate_CA' | sudo tee /etc/ssh/sb_ca.pub
# 2. In /etc/ssh/sshd_config eintragen:
echo 'TrustedUserCAKeys /etc/ssh/sb_ca.pub' | sudo tee -a /etc/ssh/sshd_config
sudo sshd -t && sudo systemctl reload ssh
- Diese Ausgabe auf dem Zielserver ausführen:
Kopieren Sie die von server-init generierte Ausgabe direkt in die SSH-Verbindung zu Ihrem Server. Die Befehle enthalten Ihren echten, individuellen CA-Key – Sie müssen nichts manuell eintragen.
Den aktuellen CA Public Key können Sie jederzeit auch direkt einsehen:
sb-ssh status
Was bedeutet das?
Der Server akzeptiert fortan jede Verbindung, deren Zertifikat von Ihrer CA signiert wurde. Sie müssen nie wieder einen Schlüssel in ~/.ssh/authorized_keys eintragen oder manuell löschen.
Schritt 4: OAuth2 / OIDC Login aktivieren
Option A: GitHub-Login (sofort, ohne Konfiguration)
Der Standardprovider ist GitHub. Ein Login-Klick genügt:
sb-ssh login
# oder explizit:
sb-ssh login --provider github
- Der Standardbrowser öffnet sich mit dem GitHub OAuth-Dialog.
- Nach erfolgreichem Login generiert die lokale CA ein Just-In-Time Ed25519-Zertifikat mit 8 Stunden Gültigkeit.
- Jeder Entwickler authentifiziert sich über seinen eigenen GitHub-Account. Scheidet er aus, wird der GitHub-Account deaktiviert — der Zugriff auf alle Server erlischt automatisch.
Option B: Lokaler Entwicklermodus (ohne Browser / Offline)
Für CI/CD-Pipelines, Air-Gapped-Umgebungen oder lokale Tests ohne IdP:
sb-ssh login --dev <username>
Dies erzeugt direkt ein lokales Entwickler-Zertifikat ohne Browser-Redirect.
Option C: Eigener OIDC-Provider (Keycloak, Authentik, etc.)
sb-ssh login --provider oidc
Die OIDC-Konfiguration (Client-ID, Issuer-URL) wird in ~/.sb-ssh/config.toml hinterlegt.
Mit sb-ssh status lässt sich der Login-Status und die verbleibende Gültigkeit jederzeit prüfen:
sb-ssh status
# Ausgabe z.B.:
# ✓ OAuth-Sitzung: AKTIV
# ► Identität: alice (alice@example.com)
# ► Gültig bis: ... (6h 11m verbleibend)
Schritt 5: BSI-Audit & Asciinema Recording aktivieren
Für Compliance-Audits nach BSI IT-Grundschutz (OPS.1.1.4 und DER.1) erfassen Sie administrative Sitzungen revisionssicher. Das Recording-Flag ist -r (Kurzform) oder --record:
# Sitzung verbinden und PTY-Stream aufzeichnen:
sb-ssh connect srv-prod-01 -r
# oder:
sb-ssh connect srv-prod-01 --record
Die Aufzeichnung wird automatisch in ~/.sb-ssh/recordings/<session_id>.cast gespeichert.
# BSI Audit-Tabelle aller Sitzungen im Terminal anzeigen:
sb-ssh audit
# Nur die letzten 5 Einträge:
sb-ssh audit --limit 5
# Rohe JSONL-Ausgabe für SIEM-Integration (Splunk, Elastic, Graylog):
sb-ssh audit --json
Die Audit-Datei selbst liegt unter ~/.sb-ssh/audit/sessions.jsonl und kann direkt ausgewertet werden.
# Sitzung offline mit Original-Timing und PTY-Events abspielen:
sb-ssh replay sb-20260907-182353-04a1
# oder direkt per Dateipfad:
sb-ssh replay ~/.sb-ssh/recordings/sb-20260907-182353-04a1.cast
Feature-Gegenüberstellung
| Eigenschaft | Herkömmliches OpenSSH | S&B NetGate (sb-ssh) |
|---|---|---|
| Authentifizierung | Statische Keys in authorized_keys |
100% Zero-Key (8h Ephemeral Ed25519-Certs) |
| Identitäts-Anbindung | Keine native IdP-Unterstützung | GitHub, OIDC (Keycloak, Authentik), --dev Modus |
| Mitarbeiter-Offboarding | Mühsames manuelles Suchen & Löschen | Sofortiger Entzug über zentralen IdP |
| Terminal Dashboard | Reine zeilenbasierte CLI | Minimalistische Ratatui TUI mit Live-Ping |
| Sitzungsaufzeichnung | Externe Tools (script, ttyrec) | Natives Asciinema v2 Recording (-r) & Replay |
| BSI-Compliance | Mühsames Parsen von syslog/auth.log | Strukturierte JSON-Lines (~/.sb-ssh/audit/sessions.jsonl) |
| Dynamischer Proxy | Komplizierte Parameterketten | 1-Klick SOCKS5 (sb-ssh proxy <srv>) |
| Dateitransfer | Auf externe scp.exe angewiesen |
Nativer Pure-Rust SFTP-Client (push/pull) |
Fazit & Download
S&B NetGate beweist, dass moderne Zero-Trust-Sicherheit nicht mit Einbußen im Entwickler-Komfort einhergehen muss. Das Tool ist vollständig kostenlos unter der MIT-Lizenz verfügbar und lässt sich mit einem einzigen Befehl installieren:
cargo install --git https://github.com/Skulls-and-Bones/sb-ssh.git
- Quellcode & Issues auf GitHub: https://github.com/Skulls-and-Bones/sb-ssh
- Offizielle Projektseite: https://www.skulls-and-bones.org/#netgate