SSH config: simplificando conexões
1. O que é o arquivo ~/.ssh/config
O arquivo ~/.ssh/config é o coração da personalização do cliente SSH no Linux e macOS. Localizado no diretório home do usuário, dentro da pasta oculta .ssh, ele permite definir regras permanentes para conexões SSH, eliminando a necessidade de digitar parâmetros repetitivos toda vez que você precisa acessar um servidor remoto.
# Localização padrão
~/.ssh/config
Sem esse arquivo, uma conexão típica exige comandos longos como:
ssh -p 2222 -i ~/.ssh/chave_privada usuario@192.168.1.100
Com o SSH config, o mesmo acesso se resume a:
ssh meu-servidor
Permissões obrigatórias: O arquivo config e a pasta .ssh devem ter permissões restritas para segurança:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
Isso impede que outros usuários do sistema leiam suas configurações e, principalmente, suas chaves privadas.
2. Sintaxe fundamental: Host, HostName, User, Port
A estrutura básica de uma entrada no SSH config segue este padrão:
Host apelido
HostName endereco-real.com
User usuario
Port 2222
- Host: Define o apelido (alias) que você usará no comando
ssh - HostName: O endereço real do servidor (IP ou domínio)
- User: Nome do usuário remoto
- Port: Porta SSH (padrão é 22)
Exemplo prático:
# ~/.ssh/config
Host prod
HostName 192.168.1.100
User deploy
Port 2222
Host dev
HostName dev.internal.company.com
User devuser
Port 22
Agora, conectar-se ao servidor de produção é tão simples quanto:
ssh prod
3. Otimizando com chaves SSH e IdentityFile
Para evitar digitar senhas ou especificar chaves manualmente, use IdentityFile:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github-key
IdentitiesOnly yes
Múltiplas chaves para diferentes servidores:
Host servidor-a
HostName 10.0.0.1
User admin
IdentityFile ~/.ssh/chave-servidor-a
Host servidor-b
HostName 10.0.0.2
User admin
IdentityFile ~/.ssh/chave-servidor-b
O parâmetro IdentitiesOnly yes é crucial quando você tem várias chaves SSH carregadas no agente. Ele força o SSH a usar apenas a chave especificada no IdentityFile, evitando o erro "Too many authentication failures" que ocorre quando o cliente tenta todas as chaves disponíveis antes de acertar.
4. Configurações de conexão e tempo
Conexões SSH que ficam inativas por muito tempo podem ser encerradas. Para evitar isso:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
ServerAliveInterval: Envia um pacote "keep alive" a cada 60 segundosServerAliveCountMax: Número máximo de tentativas sem resposta antes de desconectar (3 × 60s = 3 minutos de tolerância)
Controlando timeouts:
Host servidor-lento
HostName 203.0.113.50
User user
ConnectTimeout 30
ConnectTimeout define o tempo máximo (em segundos) para estabelecer a conexão inicial. Útil em redes instáveis.
Compressão para conexões lentas:
Host servidor-remoto
HostName slow-server.com
User user
Compression yes
A compressão (Compression yes) reduz o tráfego em links lentos, mas aumenta o uso de CPU em ambos os lados.
5. Encaminhamento de portas e agentes
Túnel local (LocalForward): Acesse serviços remotos como se estivessem na sua máquina.
Host banco-remoto
HostName db.example.com
User dba
LocalForward 3306 localhost:3306
Com isso, ssh banco-remoto cria um túnel onde localhost:3306 na sua máquina aponta para localhost:3306 no servidor remoto (geralmente um MySQL).
Túnel remoto (RemoteForward): Exponha um serviço local para o servidor remoto.
Host servidor-publico
HostName public-server.com
User user
RemoteForward 8080 localhost:3000
Isso faz com que public-server.com:8080 redirecione para localhost:3000 na sua máquina local — útil para compartilhar um servidor de desenvolvimento.
Encaminhamento do agente SSH (ForwardAgent):
Host servidor-intermediario
HostName jump.example.com
User user
ForwardAgent yes
Permite usar suas chaves SSH locais em conexões feitas a partir do servidor intermediário. Cuidado: Isso dá ao servidor intermediário acesso às suas chaves. Use apenas em servidores confiáveis. Prefira ProxyJump quando possível.
6. Usando curingas e padrões (Wildcards)
O curinga * configura opções globais que se aplicam a todas as conexões:
Host *
ServerAliveInterval 60
ForwardAgent no
Compression no
O curinga ? corresponde a um caractere qualquer, útil para grupos de hosts com nomes padronizados:
Host web-?
HostName 10.0.1.%h
User webadmin
IdentityFile ~/.ssh/web-key
Isso corresponderia a web-1, web-2, web-a, etc. O %h é substituído pelo valor do Host (ex: web-1 vira 10.0.1.web-1 — cuidado com esse uso específico).
Ordem de precedência: O SSH lê o arquivo de cima para baixo e a regra mais específica vence. Regras com Host * são as últimas na precedência. Por exemplo:
Host prod-*
User deploy
Host prod-web
HostName 10.0.1.10
User admin # Esta linha sobrescreve "deploy" para prod-web
7. Exemplos completos e cenários do dia a dia
Servidor de produção com chave e túnel:
# ~/.ssh/config
Host producao
HostName 200.150.100.50
User sysadmin
Port 2222
IdentityFile ~/.ssh/producao-key
IdentitiesOnly yes
LocalForward 3306 db.internal:3306
ServerAliveInterval 30
Acesso: ssh producao — já conecta com a chave certa, cria túnel MySQL e mantém a conexão viva.
Múltiplos servidores em uma VPC com nomes padronizados:
Host vpc-web-*
HostName 10.0.1.%h
User ubuntu
IdentityFile ~/.ssh/vpc-key
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Para conectar a vpc-web-001, vpc-web-002, etc., use ssh vpc-web-001. O %h é expandido para o nome completo do host.
Dica: combinando SSH config com scripts Bash:
#!/bin/bash
# script: deploy.sh
# Conecta ao servidor de produção e executa comandos
SERVERS=("prod-web-1" "prod-web-2" "prod-db")
for server in "${SERVERS[@]}"; do
echo "=== Conectando a $server ==="
ssh "$server" "uptime && df -h /data"
done
Com o SSH config bem configurado, esse script funciona sem precisar de senhas ou parâmetros extras.
O arquivo ~/.ssh/config é uma ferramenta poderosa que transforma o SSH de um utilitário básico em um gerenciador de conexões eficiente. Invista tempo configurando-o corretamente e economize horas de digitação repetitiva no dia a dia.
Referências
- OpenSSH Config File Documentation (man page) — Documentação oficial completa de todas as diretivas do SSH config
- SSH Academy: The SSH Client Config File — Guia detalhado com exemplos práticos de configuração do cliente SSH
- DigitalOcean: How to Configure SSH Config File — Tutorial passo a passo com cenários reais de uso
- Red Hat: SSH Config File Best Practices — Artigo técnico sobre boas práticas e segurança no SSH config
- Linuxize: How to Create SSH Config File — Tutorial completo com exemplos de múltiplos hosts e curingas