Dicas para gerenciar chaves SSH com ssh-agent e ~/.ssh/config
1. Fundamentos do gerenciamento de chaves SSH
O SSH (Secure Shell) utiliza criptografia de chave pública para autenticação. O par de chaves consiste em uma chave privada (mantida em segredo no cliente) e uma chave pública (copiada para servidores remotos). Essa abordagem elimina a necessidade de senhas tradicionais e oferece maior segurança.
O diretório padrão para armazenar essas chaves é ~/.ssh, com permissões restritas (700 para o diretório, 600 para arquivos de chave privada). Para gerar um novo par de chaves:
ssh-keygen -t ed25519 -C "seu-email@exemplo.com"
Recomenda-se usar o algoritmo Ed25519 por sua segurança e desempenho. Sempre proteja a chave privada com uma senha forte (passphrase).
2. Configurando o arquivo ~/.ssh/config para conexões eficientes
O arquivo ~/.ssh/config permite definir regras de conexão personalizadas. A sintaxe básica utiliza os parâmetros Host, HostName, User e Port:
Host servidor-dev
HostName 192.168.1.100
User desenvolvedor
Port 2222
Com essa configuração, basta digitar ssh servidor-dev para conectar, sem precisar especificar IP, usuário ou porta manualmente.
Para usar chaves específicas por host:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
3. Automatizando conexões com opções avançadas do config
Curingas permitem aplicar regras globais. Por exemplo, para todos os servidores de uma rede interna:
Host *.empresa.local
User admin
IdentityFile ~/.ssh/id_rsa_corporativo
Compression yes
ServerAliveInterval 60
Para saltar por um bastion host (ProxyJump):
Host servidor-interno
HostName 10.0.0.50
User dev
ProxyJump bastion.empresa.com
A opção Compression yes acelera transferências em conexões lentas, enquanto ServerAliveInterval mantém a conexão ativa enviando pacotes keepalive.
4. Gerenciando múltiplas chaves com ssh-agent
O ssh-agent é um programa que mantém as chaves privadas descriptografadas na memória, evitando redigitar senhas repetidamente.
Inicie o agente e adicione chaves:
eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519_github
ssh-add ~/.ssh/id_rsa_corporativo
Para verificar as chaves carregadas:
ssh-add -l
Para remover uma chave específica ou limpar todas:
ssh-add -d ~/.ssh/id_ed25519_github
ssh-add -D
5. Estratégias para persistência do ssh-agent
Integrar o ssh-agent ao shell garante que ele esteja disponível em todas as sessões do terminal. No ~/.bashrc ou ~/.zshrc:
if [ -z "$SSH_AUTH_SOCK" ]; then
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_ed25519_principal
fi
Para persistência entre sessões, o keychain é uma ferramenta útil:
# Instalação (Debian/Ubuntu)
sudo apt install keychain
# No ~/.bashrc
eval $(keychain --eval --agents ssh id_ed25519_principal)
Uma abordagem mais moderna é usar systemd user service:
systemctl --user enable ssh-agent
systemctl --user start ssh-agent
6. Resolvendo problemas comuns de autenticação SSH
Para depurar problemas de conexão, use o modo verbose:
ssh -v servidor-dev
ssh -vvv servidor-dev
Verifique permissões incorretas, uma causa frequente de falhas:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys
Conflitos de chaves podem ocorrer quando múltiplas chaves são oferecidas ao servidor. Use IdentitiesOnly yes no config para forçar o uso de uma chave específica.
7. Segurança avançada e boas práticas
Proteja sempre as chaves com senha forte (mínimo 16 caracteres, com maiúsculas, minúsculas, números e símbolos). O ssh-agent evita redigitar a senha a cada conexão.
Para rotação segura de chaves:
# Gerar nova chave
ssh-keygen -t ed25519 -C "novo-email@exemplo.com" -f ~/.ssh/id_ed25519_novo
# Adicionar ao servidor
ssh-copy-id -i ~/.ssh/id_ed25519_novo.pub usuario@servidor
# Remover chave antiga do servidor (editar authorized_keys manualmente)
No servidor, restrinja o uso de chaves no arquivo ~/.ssh/authorized_keys:
from="192.168.1.0/24",command="/usr/bin/rsync --server" ssh-ed25519 AAAAC3... chave@exemplo
8. Automação e integração com ferramentas externas
Organize configurações complexas usando a diretiva Include:
# ~/.ssh/config
Include config.d/*
Crie scripts para gerenciar chaves temporárias:
#!/bin/bash
# add-temp-key.sh
ssh-add -t 3600 ~/.ssh/chave_temporaria
echo "Chave adicionada por 1 hora"
Para integração com ferramentas como Ansible, Git e rsync, o config SSH garante que todas usem as mesmas configurações:
# Git usando config SSH
git clone git@github.com:usuario/repositorio.git
# Rsync via SSH
rsync -avz --rsh='ssh' /local/pasta usuario@servidor:/remoto/
# Ansible usando inventário com SSH config
ansible-playbook -i inventario.ini playbook.yml
Dominar o gerenciamento de chaves SSH com ssh-agent e ~/.ssh/config transforma a experiência de administração de servidores, automatizando conexões e aumentando significativamente a segurança e produtividade no trabalho com infraestrutura remota.
Referências
- OpenSSH Manual — Documentação oficial do OpenSSH com todas as opções de configuração e comandos.
- SSH Agent - Arch Linux Wiki — Guia completo sobre configuração e gerenciamento do ssh-agent no Linux.
- Using SSH Config File - Linuxize — Tutorial prático com exemplos detalhados de configuração do arquivo
~/.ssh/config. - Keychain - Gentoo Wiki — Documentação sobre a ferramenta keychain para gerenciamento persistente de ssh-agent.
- SSH ProxyJump Example - DigitalOcean — Tutorial sobre conexões SSH com ProxyJump e configurações avançadas.