Redes e Segurança

SSH avançado: tunelamento, proxyjump e autenticação por chave

• 5 min de leitura

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.

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 ~/.ssh deve ter permissão 700, a chave privada 600 e authorized_keys 600.
  • 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.0 para 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

💬 Comentários
Mais em Redes e Segurança