
Roteador SSH consciente da rede - roteia conexões para diferentes IPs/portas/chaves/hosts de salto com base na VPN ou rede ativa
| CI | Código | OpenSpec | Segurança |
|---|---|---|---|
|
|
|
|
|
Roteador SSH ciente de rede. Detecta sua rede ativa ou VPN e seleciona automaticamente o host, porta, arquivo de identidade e host de salto corretos para cada conexão SSH — sem tocar no ~/.ssh/config.
Defina cada host lógico uma vez com um perfil default e substituições opcionais por rede. Em cada conexão, o sshroute detecta em qual rede você está (VPN, LAN do escritório, peer WireGuard, etc.) e resolve os parâmetros SSH corretos antes de passar para o /usr/bin/ssh real.
ssh myserver
→ sshroute detecta: corp-vpn está ativo
→ resolve: 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
Seu laboratório provavelmente tem pelo menos duas realidades: você está em casa na LAN, ou está fora e acessa via WireGuard ou outra VPN. O problema é que o ~/.ssh/config não sabe em qual você está — então você acaba com apelidos separados (server-lan, server-vpn), ou um host de salto que só funciona metade do tempo, ou você simplesmente memoriza IPs.
O sshroute resolve isso detectando sua rede atual antes de cada conexão. Quando a interface WireGuard está ativa e a rota do peer existe, ele conecta diretamente ao IP do túnel. Quando você está na LAN, ele usa o endereço local. Quando nenhum é alcançável, ele recai para o nome de host público. Um apelido, três realidades, zero troca manual.
Ele também intercepta SSH de forma transparente — git push, rsync, scp passam automaticamente por ele assim que você configura o modo sombra. Sem wrappers, sem funções de shell, sem pensar.
Redes empresariais são piores. Você tem a internet pública, talvez uma VPN site-to-site, talvez uma VPN pessoal com split-tunnel, e dentro disso você tem diferentes hosts de salto dependendo de qual ambiente está mirando — dev, staging, produção, cada um com seu bastião e chave. Manter isso correto no ~/.ssh/config significa ou um arquivo enorme que quebra quando a infra muda, ou você escreve um script que cada pessoa da equipe mantém de forma diferente.
O sshroute permite que você defina a lógica de roteamento de forma declarativa, mantenha-a em um arquivo YAML versionado e compartilhe com a equipe. A mesma configuração funciona para todos — a rede correta é detectada automaticamente com base em quais interfaces ou rotas estão ativas em cada máquina. Chaves, portas, usuários e hosts de salto são resolvidos sem que o usuário precise pensar nisso.
| Funcionalidade | ~/.ssh/config | Somente WireGuard | Teleport / Boundary | sshroute |
|---|---|---|---|---|
| Detecta sua rede atual | ❌ | ❌ | ❌ | ✅ |
| Escolhe o melhor caminho automaticamente | ❌ | ❌ | ❌ | ✅ |
| Recai em caso de falha de conexão | ❌ | ❌ | ✅ | ✅ |
| Reconexão automática + re-roteamento ao cair | ❌ | ⚠️ túnel faz roaming | ⚠️ via proxy fixo | ✅ |
| Um comando por host, qualquer local | ❌ | ⚠️ VPN precisa estar ativa | ✅ | ✅ |
| Tamanho da config para 10 hosts × 4 caminhos | 📄 ~600 linhas | 📄 ~600 linhas + config VPN | 📄 config no servidor | 📄 ~60 linhas |
| Dispositivos móveis em roaming | ⚠️ apelidos manuais | ⚠️ VPN necessária | ✅ | ✅ |
| Encadeamento automático de host de salto | ⚠️ -J manual | ➖ n/a | ✅ | ✅ |
| Funciona com scp / rsync / git / Ansible | ✅ | ✅ | ⚠️ parcial | ✅ |
| Sem instalação no servidor nos alvos | ✅ | ❌ | ❌ | ✅ |
| Sem servidor de autenticação ou daemon para executar | ✅ | ❌ | ❌ | ✅ |
| Sem agente cliente | ✅ | ❌ | ❌ | ✅ |
| Código aberto, totalmente auto-hospedado | ✅ | ✅ | ⚠️ open-core | ✅ |
Teleport e Boundary são uma categoria diferente — eles adicionam controle de acesso, logs de auditoria e autenticação baseada em certificado sobre o roteamento. Se é isso que você precisa, use-os. O sshroute é para quando você quer a inteligência de roteamento sem a sobrecarga operacional de executar um servidor de autenticação central.
Baixe a versão mais recente em GitHub Releases. Binários estão disponíveis para Linux, macOS e Android em AMD64 e ARM64.
go install github.com/thereisnotime/sshroute@latest
Baixe o pacote android_arm64 do GitHub Releases, extraia e coloque o binário em ~/.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
Adicione ~/.local/bin ao seu PATH no ~/.bashrc ou ~/.profile se ainda não estiver: