Este guia explica como configurar acesso SSH sem senha usando chaves públicas. A abordagem vale para Linux (Debian e derivados), macOS e também Windows (PowerShell/WSL com OpenSSH).
Visão geral
- Gerar um par de chaves no cliente.
- Instalar a chave pública no servidor (em
~/.ssh/authorized_keys). - Testar a conexão SSH.
- (Opcional) Criar um
~/.ssh/configpara facilitar comandos e selecionar a identidade automaticamente.
1) Gerar o par de chaves no cliente
No computador de onde você se conecta, execute um dos comandos abaixo. Recomenda-se ED25519:
ssh-keygen -t ed25519 -C "seu_email@exemplo.com"
Alternativa (ainda comum, porém maior e mais lenta):
ssh-keygen -t rsa -b 4096 -C "seu_email@exemplo.com"
- No lugar de seu_email@exemplo.com você pode colocar qualquer comentário que identifique essa chave, por exemplo usuário@host
- Quando solicitar o caminho do arquivo, tecle Enter para aceitar o padrão (
~/.ssh/id_ed25519ouid_rsa). - Para não usar passphrase (acesso totalmente sem senha), tecle Enter quando perguntado pela frase secreta. (Opcionalmente, defina uma passphrase e use ssh-agent.)
Permissões corretas no cliente
Em sistemas tipo Unix (Linux/macOS), ajuste as permissões:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
2) Copiar a chave pública para o servidor
Método recomendado (usa senha apenas uma vez):
ssh-copy-id usuario@servidor
Se ssh-copy-id não estiver disponível, faça manualmente:
cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Permissões no servidor
Após instalar a chave pública, no servidor garanta:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3) Testar o login
ssh usuario@servidor
Se tudo estiver correto, o servidor autenticará sua chave e não pedirá senha.
4) (Opcional) Simplificar com ~/.ssh/config
No cliente, crie/edite ~/.ssh/config e adicione um bloco para cada host:
Host meu-servidor
HostName 10.10.10.10
User usuario
IdentityFile ~/.ssh/id_ed25519
- Host meu-servidor: é o apelido que você vai usar no comando SSH
- HostName: IP ou domínio do servidor.
- User: o usuário que você usava no ssh usuario@meu-servidor.
- IdentityFile: caminho da sua chave privada (se usou ssh-keygen padrão, vai estar em ~/.ssh/id_ed25519).
Agora você pode conectar usando apenas:
ssh meu-servidor
Ajuste as permissões do arquivo de configuração:
chmod 600 ~/.ssh/config
Dicas e boas práticas
- Várias identidades: gere pares de chaves diferentes para ambientes distintos (pessoal, trabalho) e selecione com
IdentityFileouIdentitiesOnly yesno bloco do host. - Agente SSH: se usar passphrase, carregue a chave no ssh-agent para evitar digitar a cada conexão (
eval $(ssh-agent),ssh-add ~/.ssh/id_ed25519). - Segurança do servidor: após confirmar que a autenticação por chave funciona, considere desabilitar PasswordAuthentication no
/etc/ssh/sshd_confige reiniciar o serviço. Faça isso com cautela e mantenha uma sessão aberta para evitar bloqueios. - Backup: guarde a chave privada (arquivo sem
.pub) de forma segura. Nunca compartilhe a chave privada.
Windows (PowerShell/WSL)
- No Windows 10/11 com OpenSSH Client: execute os mesmos comandos (
ssh-keygen,ssh-copy-idvia WSL ou manual). As chaves ficam normalmente emC:\Users\SEU_USUARIO\.ssh\. - No WSL, o caminho padrão é
~/.ssh/do Linux (dentro da distro).
Resolução de problemas (Troubleshooting)
- Permissões incorretas: pastas/arquivos de chave e
authorized_keysprecisam das permissões indicadas. - Chave errada: confira se você copiou a pública (
*.pub) para o servidor. - Usuário/host: confirme
UsereHostNameno~/.ssh/config. - Verbosidade: use
ssh -vvv usuario@servidorpara depurar.
Resumo rápido
- Gerar o par de chaves no cliente (
ssh-keygen). - Instalar a chave pública no servidor (
ssh-copy-idou manual). - Testar (
ssh usuario@servidor). - (Opcional) Configurar
~/.ssh/configpara apelidos e identidade.
Compatível com Debian GNU/Linux e similares, como Proxmox VE e OPNsense (FreeBSD), e aplicável em grande parte ao Windows (WSL/PowerShell) e macOS.