Configuracao de Autenticacao por Chave SSH - Login Seguro sem Senha
O Que Este Artigo Aborda
- Como gerar um par de chaves SSH e conectar-se a um servidor
- Como implantar sua chave publica corretamente com
ssh-copy-id - Como gerenciar multiplos servidores com
~/.ssh/config
Resumo Rapido (3 Passos)
- Execute
ssh-keygen -t ed25519para gerar um par de chaves - Execute
ssh-copy-id user@serverpara implantar a chave publica - Execute
ssh user@server— sem necessidade de senha
Pre-requisitos
- Ubuntu / Debian / Linux baseado em RHEL no cliente e no servidor
- OpenSSH instalado em ambas as maquinas
- Acesso inicial ao servidor via autenticacao por senha
Por Que Usar Autenticacao por Chave?
A autenticacao por chave e mais segura que senhas e elimina a entrada manual para automacao. Os tres principais motivos para migrar:
- Seguranca: Sua chave privada nunca sai da sua maquina local. Nenhuma senha e enviada pela rede.
- Resistencia a forca bruta: Um comprimento de chave matematicamente robusto torna ataques de dicionario inviaveis.
- Automacao: rsync, Ansible e pipelines CI/CD podem conectar-se de forma nao interativa.
1. Gerar um Par de Chaves
Qual algoritmo usar?
ED25519 e a recomendacao atual. E mais curto, mais seguro e mais rapido que RSA-4096.
ssh-keygen -t ed25519 -C "your_email@example.com"
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_ed25519 Your public key has been saved in /home/user/.ssh/id_ed25519.pub
A flag -C adiciona um comentario (util para identificacao). E opcional.
Por que definir uma passphrase?
Uma passphrase criptografa o proprio arquivo da chave privada. Mesmo que sua maquina seja roubada, a chave nao pode ser usada imediatamente. Use ssh-agent para evitar redigitar a passphrase a cada conexao (veja abaixo).
Verifique os arquivos gerados:
ls -la ~/.ssh/
total 16 drwx------ 2 user user 4096 May 31 10:00 . drwxr-xr-x 8 user user 4096 May 31 10:00 .. -rw------- 1 user user 419 May 31 10:00 id_ed25519 -rw-r--r-- 1 user user 107 May 31 10:00 id_ed25519.pub
id_ed25519(chave privada): permissoes600. Nunca compartilhe este arquivo.id_ed25519.pub(chave publica): adicionada ao~/.ssh/authorized_keysno servidor.
2. Implantar a Chave Publica no Servidor
Usando ssh-copy-id (recomendado)
Execute uma vez enquanto a autenticacao por senha ainda estiver ativa no servidor.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_ed25519.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s) /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed user@server's password: Number of key(s) added: 1
ssh-copy-id adiciona a chave publica ao ~/.ssh/authorized_keys no servidor e define as permissoes corretas automaticamente.
Implantacao manual quando ssh-copy-id nao esta disponivel
cat ~/.ssh/id_ed25519.pub | ssh user@server \ "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
3. Definir Permissoes Corretas
O SSH rejeita a autenticacao por chave quando as permissoes do diretorio ou arquivo sao muito permissivas. Esse e um comportamento intencional de seguranca.
| Caminho | Permissao Necessaria | Motivo |
|---|---|---|
~/.ssh/ |
700 |
Somente leitura/escrita/execucao do dono |
~/.ssh/authorized_keys |
600 |
Somente leitura/escrita do dono |
~/.ssh/id_ed25519 |
600 |
Chave privada deve ser estritamente protegida |
~/.ssh/id_ed25519.pub |
644 |
Chave publica e segura para outros lerem |
Comandos de correcao:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod 600 ~/.ssh/id_ed25519
Permissoes como 777 ou 755 fazem o SSH ignorar silenciosamente a chave e retornar Permission denied (publickey). Sempre verifique as permissoes primeiro ao solucionar problemas.
4. Testar a Conexao
ssh -v user@server
A flag -v (verbose) imprime o processo de autenticacao em detalhes.
... debug1: Offering public key: /home/user/.ssh/id_ed25519 ED25519 SHA256:xxxxx debug1: Server accepts key: /home/user/.ssh/id_ed25519 ED25519 SHA256:xxxxx Authenticated to server ([x.x.x.x]:22) using "publickey".
Authenticated to server ... using "publickey" confirma que a autenticacao por chave esta funcionando.
5. Gerenciar Conexoes com ~/.ssh/config
O arquivo ~/.ssh/config permite salvar configuracoes de conexao sob um alias curto.
vim ~/.ssh/config
Exemplo de configuracao:
Host myserver
HostName 192.168.1.100
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Port 22
Host staging
HostName staging.example.com
User deploy
IdentityFile ~/.ssh/id_ed25519Apos salvar, conecte-se apenas com ssh myserver.
chmod 600 ~/.ssh/config
Se as permissoes de ~/.ssh/config forem mais permissivas que 644, o SSH pode ignorar o arquivo completamente. Mantenha em 600.
6. Gerenciar Passphrases com ssh-agent
ssh-agent mantem sua chave descriptografada na memoria para que voce digite a passphrase apenas uma vez por sessao.
# Iniciar o agente eval "$(ssh-agent -s)" # Adicionar sua chave (digite a passphrase uma vez) ssh-add ~/.ssh/id_ed25519
Identity added: /home/user/.ssh/id_ed25519 (your_email@example.com)
Listar chaves registradas:
ssh-add -l
No macOS, o Keychain do sistema integra-se com o ssh-agent. Adicione UseKeychain yes e AddKeysToAgent yes ao ~/.ssh/config para persistir as chaves entre reinicializacoes.
Resumo
| Comando | Finalidade |
|---|---|
ssh-keygen -t ed25519 |
Gerar par de chaves (ED25519) |
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server |
Implantar chave publica no servidor |
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys |
Corrigir permissoes de diretorio e arquivo |
ssh -v user@server |
Testar conexao com saida detalhada |
eval "$(ssh-agent -s)" && ssh-add |
Cachear passphrase para a sessao |