Este post mostra como criar um túnel SSH para que aplicações locais que escutam em localhost:8000 se conectem a um servidor remoto, também na porta 8000. Trata-se de um redirecionamento local, comumente conhecido como proxy reverso via SSH (túnel local).
Cenário
Você está em uma máquina local (cliente) e quer acessar localhost:8000, mas os dados devem ser redirecionados via SSH para servidor_remoto:8000. O servidor está acessível via SSH com um usuário válido.
Solução com ssh -L (Túnel Local)
Este é o comando base para criar o redirecionamento:
ssh -L 8000:localhost:8000 usuario@servidor_remoto
Explicação dos parâmetros:
-L 8000:localhost:8000: cria o túnel local. O primeiro8000é a porta que o cliente vai escutar. Olocalhost:8000após os dois-pontos é o destino no lado do servidor. Em outras palavras: tudo que for enviado alocalhost:8000na máquina cliente será redirecionado via SSH paralocalhost:8000no servidor remoto.usuario@servidor_remoto: credencial de acesso SSH ao servidor.
Após executar, qualquer chamada a:
curl http://localhost:8000
será enviada para o servidor remoto na mesma porta, via SSH.
Túnel SSH sem shell interativo
Caso queira manter o túnel ativo em segundo plano sem abrir um terminal SSH interativo:
ssh -fN -L 8000:localhost:8000 usuario@servidor_remoto
Parâmetros adicionais:
-f: envia o processo para background-N: não executa comandos no servidor, apenas estabelece o túnel
Este comando é ideal para automação ou scripts.
Caso inverso: servidor acessando o cliente (túnel reverso)
Se você deseja que o servidor acesse a porta 8000 do cliente, use um túnel reverso:
ssh -R 8000:localhost:8000 usuario@servidor_remoto
Neste caso, ao acessar localhost:8000 no servidor remoto, a conexão será redirecionada para a porta 8000 da máquina cliente.
Mantendo o túnel ativo: autossh
Para evitar quedas de conexão e reconectar automaticamente em caso de falha, utilize autossh.
Instalação:
sudo apt install autossh
Exemplo de uso:
autossh -fN -L 8000:localhost:8000 usuario@servidor_remoto
Este comando cria o túnel e mantém a conexão persistente.
Configuração persistente com systemd
Para manter o túnel ativo mesmo após reinicializações, crie um serviço systemd.
Exemplo de unit file:
[Unit]
Description=Túnel SSH Local para Servidor Remoto
After=network.target
[Service]
User=seu_usuario
ExecStart=/usr/bin/ssh -N -L 8000:localhost:8000 usuario@servidor_remoto
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Salve como /etc/systemd/system/ssh-tunel8000.service, depois:
sudo systemctl daemon-reexec
sudo systemctl enable --now ssh-tunel8000.service
Pronto. O túnel será estabelecido automaticamente com o boot do sistema.
Considerações
- O SSH precisa estar corretamente configurado e acessível no servidor remoto.
- O serviço remoto na porta 8000 deve estar escutando em
localhostou0.0.0.0, conforme o uso. - Para acessos públicos (outras máquinas acessarem seu túnel), é possível usar
-L 0.0.0.0:8000:localhost:8000.
Conclusão
Redirecionar portas com SSH é uma prática poderosa, segura e nativa do próprio protocolo. Evita a necessidade de VPNs ou ferramentas adicionais em muitos casos. Com ssh -L, ssh -R, autossh e systemd, é possível construir túneis estáveis e automatizados para diversos cenários, incluindo acesso a serviços restritos e transporte seguro de dados entre redes isoladas.
