
Netzwerkbewusster SSH-Router - leitet Verbindungen zu verschiedenen IPs/Ports/Keys/Sprunghosts basierend auf dem aktiven VPN oder Netzwerk um.
| CI | Code | OpenSpec | Security |
|---|---|---|---|
|
|
|
|
|
Netzwerkbewusster SSH-Router. Erkennt Ihr aktives Netzwerk oder VPN und wählt automatisch den richtigen Host, Port, Identity File und Jump-Host für jede SSH-Verbindung aus – ohne ~/.ssh/config anfassen zu müssen.
Definieren Sie jeden logischen Host einmal mit einem default-Profil und optionalen netzwerkspezifischen Überschreibungen. Bei jeder Verbindung erkennt sshroute, in welchem Netzwerk Sie sich befinden (VPN, Büro-LAN, WireGuard-Peer usw.) und löst die korrekten SSH-Parameter auf, bevor es an das echte /usr/bin/ssh übergibt.
ssh myserver
→ sshroute erkennt: corp-vpn ist aktiv
→ löst auf: 10.100.0.50:2222 via bastion.corp.internal
→ exec /usr/bin/ssh -p 2222 -i ~/.ssh/corp_key -J bastion.corp.internal 10.100.0.50
Ihr Labor hat wahrscheinlich mindestens zwei Realitäten: Entweder Sie sitzen zu Hause im LAN oder Sie sind unterwegs und kommen über WireGuard oder ein anderes VPN herein. Das Problem: ~/.ssh/config weiß nicht, in welchem Sie sich befinden – also landen Sie bei separaten Aliasen (server-lan, server-vpn), einem Jump-Host, der nur halb funktioniert, oder Sie merken sich einfach IPs.
sshroute löst dies, indem es vor jeder Verbindung Ihr aktuelles Netzwerk erkennt. Wenn das WireGuard-Interface aktiv ist und die Peer-Route existiert, verbindet es direkt zur Tunnel-IP. Wenn Sie im LAN sind, verwendet es die lokale Adresse. Wenn keines erreichbar ist, fällt es auf den öffentlichen Hostnamen zurück. Ein Alias, drei Realitäten, null manuelles Umschalten.
Außerdem fängt sshroute SSH transparent ab – git push, rsync, scp werden automatisch darüber geleitet, sobald Sie den Schattenmodus eingerichtet haben. Keine Wrapper, keine Shell-Funktionen, kein Nachdenken.
Unternehmensnetzwerke sind noch schlimmer. Sie haben das öffentliche Internet, vielleicht ein Site-to-Site-VPN, vielleicht ein persönliches VPN mit Split-Tunnel, und darin verschiedene Jump-Hosts, je nachdem, welche Umgebung Sie anvisieren – Dev, Staging, Prod, jede mit eigener Bastion und eigenem Schlüssel. Das in ~/.ssh/config gerade zu halten bedeutet entweder eine riesige Konfiguration, die bei jeder Infrastrukturänderung kaputt geht, oder ein Skript, das jedes Teammitglied anders pflegt.
sshroute ermöglicht es Ihnen, die Routinglogik deklarativ zu definieren, in einer versionierten YAML-Datei zu speichern und im Team zu teilen. Die gleiche Konfiguration funktioniert für alle – das richtige Netzwerk wird automatisch erkannt, basierend darauf, welche Interfaces oder Routen auf jedem Rechner aktiv sind. Schlüssel, Ports, Benutzer und Jump-Hosts werden aufgelöst, ohne dass der Benutzer darüber nachdenken muss.
| Funktion | ~/.ssh/config | Nur WireGuard | Teleport / Boundary | sshroute |
|---|---|---|---|---|
| Erkennt Ihr aktuelles Netzwerk | ❌ | ❌ | ❌ | ✅ |
| Wählt automatisch den besten Pfad | ❌ | ❌ | ❌ | ✅ |
| Fallback bei Verbindungsfehler | ❌ | ❌ | ✅ | ✅ |
| Automatische Wiederverbindung + Neurouting bei Trennung | ❌ | ⚠️ Tunnel roamt | ⚠️ via festem Proxy | ✅ |
| Ein Befehl pro Host, von überall | ❌ | ⚠️ VPN muss aktiv sein | ✅ | ✅ |
| Konfigurationsgröße für 10 Hosts × 4 Pfade | 📄 ~600 Zeilen | 📄 ~600 Zeilen + VPN-Konfig | 📄 Server-seitige Konfig | 📄 ~60 Zeilen |
| Mobile Geräte im Roaming | ⚠️ manuelle Aliase | ⚠️ VPN erforderlich | ✅ | ✅ |
| Automatisches Chaining von Jump-Hosts | ⚠️ manuelles -J | ➖ n/a | ✅ | ✅ |
| Funktioniert mit scp / rsync / git / Ansible | ✅ | ✅ | ⚠️ teilweise | ✅ |
| Keine Server-Installation auf Zielen | ✅ | ❌ | ❌ | ✅ |
| Kein Authentifizierungsserver oder Daemon erforderlich | ✅ | ❌ | ❌ | ✅ |
| Kein Client-Agent | ✅ | ❌ | ❌ | ✅ |
| Open Source, vollständig selbst gehostet | ✅ | ✅ | ⚠️ Open-Core | ✅ |
Teleport und Boundary sind eine andere Kategorie – sie fügen Zugriffskontrolle, Audit-Logs und zertifikatsbasierte Authentifizierung zum Routing hinzu. Wenn Sie das brauchen, nutzen Sie sie. sshroute ist für diejenigen, die die Routing-Intelligenz wollen, ohne den Betriebsaufwand eines zentralen Auth-Servers.
Laden Sie die neueste Veröffentlichung von GitHub Releases herunter. Binärdateien sind für Linux, macOS und Android auf AMD64 und ARM64 verfügbar.
go install github.com/thereisnotime/sshroute@latest
Laden Sie das android_arm64-Tarball von GitHub Releases herunter, extrahieren Sie es und legen Sie die Binärdatei in ~/.local/bin ab: