SSH avançado: tunelamento, proxyjump e autenticação por chave
O SSH (Secure Shell) é muito mais do que uma ferramenta para acesso remoto a servidores. Quando dominamos seus recursos avançados, podemos construir túneis criptografados, contornar firewalls, acessar redes internas com segurança e automatizar conexões complexas. Este artigo explora três pilares do SSH avançado: autenticação por chave pública, tunelamento de portas e o poderoso recurso ProxyJump.
1. Fundamentos da Autenticação por Chave Pública
A autenticação por chave pública elimina a necessidade de senhas, substituindo-as por um par de chaves criptográficas. A chave privada fica em sua máquina local (nunca compartilhada), enquanto a chave pública é instalada nos servidores que você deseja acessar.
Geração de Par de Chaves
Use ssh-keygen para gerar o par. O algoritmo Ed25519 é recomendado por sua segurança e desempenho:
ssh-keygen -t ed25519 -C "seu_email@exemplo.com"
Para sistemas legados que não suportam Ed25519, use RSA com 4096 bits:
ssh-keygen -t rsa -b 4096 -C "seu_email@exemplo.com"
O comando criará dois arquivos em ~/.ssh/: id_ed25519 (privada) e id_ed25519.pub (pública).
Distribuição da Chave Pública
O método mais simples é usar ssh-copy-id:
ssh-copy-id usuario@servidor-remoto.com
Alternativamente, você pode copiar manualmente o conteúdo da chave pública para ~/.ssh/authorized_keys no servidor remoto.
Práticas de Segurança Essenciais
- Permissões corretas: O diretório
~/.sshdeve ter permissão 700, a chave privada 600 eauthorized_keys600. - Frase secreta (passphrase): Sempre proteja sua chave privada com uma frase secreta forte.
- ssh-agent: Use o agente SSH para armazenar sua frase secreta na memória durante a sessão.
2. Gerenciamento Avançado de Chaves e Agentes
O ssh-agent gerencia suas chaves privadas na memória, evitando que você redigite a passphrase a cada conexão.
Iniciando e Adicionando Chaves
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Encaminhamento de Agente (ForwardAgent)
O encaminhamento de agente permite usar suas chaves locais a partir de um servidor intermediário. Configure no ~/.ssh/config:
Host servidor-intermediario
ForwardAgent yes
Atenção: Isso permite que o administrador do servidor intermediário use suas chaves. Use apenas em servidores confiáveis.
Chaves Específicas por Host
No arquivo ~/.ssh/config, defina chaves diferentes para hosts diferentes:
Host github.com
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
Host servidor-corporativo
IdentityFile ~/.ssh/id_rsa_corporativo
IdentitiesOnly yes
A opção IdentitiesOnly yes impede que o SSH tente outras chaves automaticamente.
3. Tunelamento SSH: Redirecionamento de Portas Local
O túnel local (-L) expõe um serviço remoto na sua máquina local como se estivesse rodando nela.
Sintaxe Básica
ssh -L [bind_address:]porta_local:host_destino:porta_destino usuario@servidor_ssh
Exemplo Prático: Acesso a Banco de Dados Remoto
Suponha que um banco MySQL roda no servidor db-interno.local (porta 3306), acessível apenas via SSH pelo servidor gateway.externo.com:
ssh -L 3307:db-interno.local:3306 usuario@gateway.externo.com
Agora você pode conectar ao MySQL localmente na porta 3307:
mysql -h 127.0.0.1 -P 3307 -u admin -p
Considerações Importantes
- Use
bind_address:0.0.0.0para permitir que outros dispositivos da rede local usem o túnel. - Portas abaixo de 1024 exigem privilégios de root.
- Múltiplos túneis podem ser criados com múltiplos
-L.
4. Tunelamento SSH: Redirecionamento de Portas Remoto e Dinâmico
Túnel Remoto (-R)
O túnel remoto expõe um serviço local para a rede remota. Útil para compartilhar um servidor de desenvolvimento local com colegas.
ssh -R 8080:localhost:3000 usuario@servidor-publico.com
Isso faz com que o servidor público escute na porta 8080 e redirecione o tráfego para sua máquina local na porta 3000.
Túnel Dinâmico (-D)
Cria um proxy SOCKS5 que roteia todo o tráfego através do servidor SSH.
ssh -D 1080 usuario@servidor-remoto.com
Configure seu navegador para usar o proxy SOCKS5 em localhost:1080. Todo o tráfego será criptografado e parecerá originar-se do servidor remoto.
5. ProxyJump: Conexão em Saltos (Jump Hosts)
ProxyJump permite conectar-se a um servidor final passando por um ou mais servidores intermediários (bastion hosts).
Sintaxe Direta com -J
ssh -J usuario_bastion@bastion.externo.com usuario_final@servidor-interno.local
Configuração no ~/.ssh/config
Host bastion
HostName bastion.externo.com
User usuario_bastion
Host servidor-interno
HostName 10.0.0.50
User usuario_final
ProxyJump bastion
Agora basta digitar ssh servidor-interno.
Múltiplos Saltos
ssh -J host1,host2,host3 usuario@destino-final
6. Configuração Otimizada no ~/.ssh/config
Crie aliases para simplificar conexões complexas:
Host db-prod
HostName gateway.empresa.com
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519_prod
LocalForward 3307 db-interno:3306
Host jump-box
HostName jump.empresa.com
User deploy
ProxyCommand ssh -W %h:%p bastion
Host servidor-lento
HostName servidor-antigo.com
ServerAliveInterval 60
ServerAliveCountMax 3
TCPKeepAlive yes
O ProxyCommand com ssh -W é uma alternativa ao ProxyJump para versões mais antigas do SSH.
7. Segurança e Boas Práticas em Conexões SSH Avançadas
Restrições no Servidor
No arquivo /etc/ssh/sshd_config, restrinja túneis para evitar abusos:
AllowTcpForwarding remote
PermitOpen 192.168.1.100:5432
Autenticação Multifator
Combine chave pública com senha ou TOTP:
AuthenticationMethods publickey,password
Monitoramento de Conexões
Verifique conexões ativas com:
ss -tnp | grep :22
Monitore logs em /var/log/auth.log ou /var/log/secure para detectar tentativas de acesso suspeitas.
Conclusão
O SSH avançado transforma o simples acesso remoto em uma plataforma poderosa para tunelamento, roteamento e automação segura. Dominar a autenticação por chave, os túneis local, remoto e dinâmico, além do ProxyJump, permite criar infraestruturas de acesso robustas e flexíveis. Sempre priorize a segurança: use chaves com passphrase, restrinja túneis no servidor e monitore ativamente suas conexões.
Referências
- OpenSSH Manual Pages — Documentação oficial completa do OpenSSH, incluindo opções de tunelamento e configuração.
- SSH Tunneling Explained — Guia detalhado sobre todos os tipos de túneis SSH, com exemplos práticos.
- Using SSH ProxyJump — Artigo da Red Hat explicando ProxyJump e cenários de bastion host.
- SSH Key Management Best Practices — Diretrizes de segurança da Mozilla para gerenciamento de chaves SSH.
- SSH Agent Forwarding Risks — Artigo técnico sobre os riscos de segurança do encaminhamento de agente SSH.
- How to Set Up SSH Keys — Tutorial prático da DigitalOcean sobre configuração de chaves SSH em servidores Linux.
- SSH Configuration File Examples — Guia com exemplos avançados de configuração do arquivo
~/.ssh/config.