SSH
| Comando | O que faz |
|---|---|
ssh-keygen -t ed25519 -C "ana@empresa" |
Gera par de chaves (padrão atual) |
ssh-keygen -t rsa -b 4096 |
RSA, quando ed25519 não é suportado |
ssh-keygen -l -f ~/.ssh/id_ed25519.pub |
Fingerprint da chave |
ssh-keygen -y -f ~/.ssh/id_ed25519 |
Deriva a pública a partir da privada |
ssh-copy-id user@host |
Instala a pública no destino |
ssh-keygen -p -f ~/.ssh/id_ed25519 |
Troca a senha da chave |
ssh-keygen -R host |
Remove entrada do known_hosts |
Permissões obrigatórias: 700 em ~/.ssh, 600 na chave privada. Com permissão frouxa,
o cliente recusa usar a chave.
eval "$(ssh-agent -s)"ssh-add ~/.ssh/id_ed25519ssh-add -l # chaves carregadasssh-add -D # remove todasssh -A user@host # encaminha o agente (cuidado: veja pegadinhas)Arquivo de configuração
Seção intitulada “Arquivo de configuração”~/.ssh/config — o que mais economiza tempo no dia a dia:
Host * ServerAliveInterval 60 ServerAliveCountMax 3 AddKeysToAgent yes HashKnownHosts yes
Host bastion HostName bastion.exemplo.com.br User ana IdentityFile ~/.ssh/id_ed25519 Port 22
Host prod-* User deploy ProxyJump bastion # salto automático pelo bastion IdentityFile ~/.ssh/id_prod IdentitiesOnly yes
Host git-empresa HostName github.com User git IdentityFile ~/.ssh/id_trabalho IdentitiesOnly yesIdentitiesOnly yes evita que o cliente ofereça todas as chaves do agente — é o que
resolve o erro “too many authentication failures”.
Conexão e salto
Seção intitulada “Conexão e salto”| Comando | O que faz |
|---|---|
ssh user@host |
Conexão simples |
ssh -p 2222 user@host |
Porta alternativa |
ssh -i ~/.ssh/chave user@host |
Chave específica |
ssh -J bastion user@interno |
Salto por bastion (ProxyJump) |
ssh -J b1,b2 user@destino |
Vários saltos |
ssh user@host 'comando' |
Executa e sai |
ssh -t user@host 'sudo -i' |
Força TTY (necessário para interativos) |
ssh -v / -vvv |
Diagnóstico (o -vvv mostra a negociação inteira) |
Prefira ProxyJump a ProxyCommand com netcat: o tráfego não é decifrado no bastion.
Túneis e encaminhamento
Seção intitulada “Túneis e encaminhamento”# local: acessa um banco interno como se fosse localssh -L 5432:db-interno:5432 bastion# → psql -h 127.0.0.1 -p 5432
# remoto: expõe um serviço local no servidorssh -R 8080:localhost:3000 host
# dinâmico: proxy SOCKS para o navegadorssh -D 1080 bastion
# túnel em segundo plano, sem shellssh -fN -L 5432:db-interno:5432 bastion| Flag | Significado |
|---|---|
-L local:destino:porta |
Encaminha porta local para o destino |
-R porta:local:porta |
Expõe porta local no servidor remoto |
-D porta |
Proxy SOCKS |
-f |
Vai para segundo plano |
-N |
Não executa comando remoto |
Transferência de arquivos
Seção intitulada “Transferência de arquivos”| Comando | O que faz |
|---|---|
scp arquivo user@host:/destino/ |
Cópia simples |
scp -r dir user@host:/destino/ |
Recursivo |
rsync -avz --progress dir/ user@host:/destino/ |
Sincroniza, retomável |
rsync -avz --delete dir/ user@host:/destino/ |
Espelha (apaga o que não existe na origem) |
sftp user@host |
Sessão interativa |
rsync é preferível a scp para volume: transfere só a diferença e retoma.
Endurecimento do servidor
Seção intitulada “Endurecimento do servidor”/etc/ssh/sshd_config — o essencial:
PermitRootLogin noPasswordAuthentication noKbdInteractiveAuthentication noPubkeyAuthentication yesAllowGroups sshusersMaxAuthTries 3ClientAliveInterval 300ClientAliveCountMax 2X11Forwarding noAllowAgentForwarding nosshd -t # valida a configuração ANTES de reiniciarsystemctl reload sshdDeixe uma sessão aberta ao alterar a configuração do SSH: se algo quebrar, você ainda tem acesso para corrigir.
Diagnóstico
Seção intitulada “Diagnóstico”| Sintoma | Causa provável |
|---|---|
Permission denied (publickey) |
Chave não instalada, usuário errado, permissão do ~/.ssh |
Too many authentication failures |
Agente oferecendo muitas chaves; use IdentitiesOnly |
Host key verification failed |
Chave do host mudou; verifique antes de remover |
Connection timed out |
Firewall, security group ou rota |
Connection refused |
Serviço não está escutando naquela porta |
| Conexão cai sozinha | Falta ServerAliveInterval, ou NAT com timeout curto |
| Lento para conectar | DNS reverso no servidor (UseDNS no) |
Pegadinhas
Seção intitulada “Pegadinhas”- Encaminhamento de agente (
-A) permite que quem controla o host use suas chaves. PrefiraProxyJump. - Chave sem senha em máquina compartilhada é credencial em texto claro.
- Alterar
known_hostssem verificar o fingerprint anula a proteção contra man-in-the-middle. - Chave permanente é credencial de longa duração: prefira certificado SSH de curta duração emitido por identidade.
rsync --deleteapaga no destino; teste com--dry-run.