
Router SSH consapevole della rete - instrada le connessioni verso diversi IP/porte/chiavi/host di salto in base alla VPN attiva o alla rete
| CI | Codice | OpenSpec | Sicurezza |
|---|---|---|---|
|
|
|
|
|
Router SSH consapevole della rete. Rileva la rete attiva o la VPN e seleziona automaticamente l'host, la porta, il file di identità e il jump host corretti per ogni connessione SSH, senza toccare ~/.ssh/config.
Definisci ogni host logico una volta con un profilo default e override opzionali per rete. Ad ogni connessione, sshroute rileva su quale rete ti trovi (VPN, LAN ufficio, peer WireGuard, ecc.) e risolve i parametri SSH corretti prima di passare il controllo al vero /usr/bin/ssh.
ssh myserver
→ sshroute rileva: corp-vpn è attiva
→ risolve: 10.100.0.50:2222 tramite bastion.corp.internal
→ exec /usr/bin/ssh -p 2222 -i ~/.ssh/corp_key -J bastion.corp.internal 10.100.0.50
Il tuo laboratorio ha probabilmente almeno due realtà: sei a casa sulla LAN, oppure sei fuori e ti connetti tramite WireGuard o un'altra VPN. Il problema è che ~/.ssh/config non sa in quale ti trovi — così ti ritrovi con alias separati (server-lan, server-vpn), o un jump host che funziona solo a metà, o semplicemente memorizzi gli IP.
sshroute risolve questo problema rilevando la rete corrente prima di ogni connessione. Quando l'interfaccia WireGuard è attiva e la route del peer esiste, si connette direttamente all'IP del tunnel. Quando sei sulla LAN, usa l'indirizzo locale. Quando nessuno dei due è raggiungibile, ricade sul nome host pubblico. Un alias, tre realtà, nessuna commutazione manuale.
Intercetta anche SSH in modo trasparente — git push, rsync, scp passano tutti attraverso automaticamente una volta impostata la modalità shadow. Nessun wrapper, nessuna funzione di shell, nessun pensiero.
Le reti aziendali sono peggio. Hai Internet pubblico, forse una VPN site-to-site, forse una VPN personale split-tunnel, e all'interno di questa diversi jump host a seconda dell'ambiente che stai targetizzando — dev, staging, prod, ciascuno con il proprio bastion e la propria chiave. Mantenere tutto in ordine in ~/.ssh/config significa o un file enorme che si rompe ogni volta che l'infrastruttura cambia, o scrivere uno script che ogni membro del team mantiene in modo diverso.
sshroute ti permette di definire la logica di routing in modo dichiarativo, mantenerla in un file YAML con versionamento e condividerla con il team. La stessa configurazione funziona per tutti — la rete giusta viene rilevata automaticamente in base alle interfacce o route attive su ciascuna macchina. Chiavi, porte, utenti e jump host vengono risolti senza che l'utente debba pensarci.
| Caratteristica | ~/.ssh/config | Solo WireGuard | Teleport / Boundary | sshroute |
|---|---|---|---|---|
| Rileva la rete corrente | ❌ | ❌ | ❌ | ✅ |
| Sceglie automaticamente il percorso migliore | ❌ | ❌ | ❌ | ✅ |
| Ricade su connessione fallita | ❌ | ❌ | ✅ | ✅ |
| Riconnessione automatica + re-routing su caduta | ❌ | ⚠️ il tunnel vaga | ⚠️ tramite proxy fisso | ✅ |
| Un comando per host, ovunque | ❌ | ⚠️ VPN deve essere attiva | ✅ | ✅ |
| Dimensione configurazione per 10 host × 4 percorsi | 📄 ~600 righe | 📄 ~600 righe + config VPN | 📄 configurazione lato server | 📄 ~60 righe |
| Dispositivi mobili in roaming | ⚠️ alias manuali | ⚠️ VPN necessaria | ✅ | ✅ |
| Concatenamento automatico jump host | ⚠️ -J manuale | ➖ n/a | ✅ | ✅ |
| Funziona con scp / rsync / git / Ansible | ✅ | ✅ | ⚠️ parziale | ✅ |
| Nessuna installazione lato server sui target | ✅ | ❌ | ❌ | ✅ |
| Nessun server di autenticazione o demone da eseguire | ✅ | ❌ | ❌ | ✅ |
| Nessun agente client | ✅ | ❌ | ❌ | ✅ |
| Open source, completamente self-hosted | ✅ | ✅ | ⚠️ open-core | ✅ |
Teleport e Boundary sono una categoria diversa — aggiungono controllo degli accessi, log di audit e autenticazione basata su certificati oltre al routing. Se è ciò di cui hai bisogno, usali. sshroute è per quando vuoi l'intelligenza di routing senza il sovraccarico operativo di gestire un server di autenticazione centrale.
Scarica l'ultima release da GitHub Releases. I binari sono disponibili per Linux, macOS e Android su AMD64 e ARM64.
go install github.com/thereisnotime/sshroute@latest
Scarica il tarball android_arm64 da GitHub Releases, estrailo e posiziona il binario in ~/.local/bin:
mkdir -p ~/.local/bin
curl -Lo "$TMPDIR/sshroute.tar.gz" \
https://github.com/thereisnotime/sshroute/releases/latest/download/sshroute_android_arm64.tar.gz
tar -xzf "$TMPDIR/sshroute.tar.gz" -C ~/.local/bin sshroute
chmod +x ~/.local/bin/sshroute
Aggiungi ~/.local/bin al tuo PATH in ~/.bashrc o ~/.profile se non lo è già: