Solução de Problemas de Erros SSH "Permission Denied (publickey)"
Ao tentar conectar-se a um servidor remoto via SSH, encontrar o erro "Permission Denied (publickey)" pode ser um obstáculo frustrante. Este erro indica especificamente que o servidor rejeitou sua conexão porque não conseguiu autenticá-lo usando sua chave pública. Diferentemente da autenticação baseada em senha, a criptografia de chave pública depende de um par de chaves: uma chave privada mantida em segredo em sua máquina local e uma chave pública colocada no servidor. Este guia o orientará pelas causas comuns desse erro e fornecerá etapas detalhadas para diagnosticá-las e resolvê-las, garantindo um acesso SSH seguro e tranquilo.
Compreender o processo de autenticação de chave pública do SSH é crucial para uma solução de problemas eficaz. Quando você tenta se conectar, seu cliente SSH apresenta sua chave pública ao servidor. O servidor verifica se essa chave pública está autorizada para sua conta de usuário. Se estiver, o servidor criptografa um desafio com sua chave pública e o envia de volta. Seu cliente, possuindo a chave privada correspondente, descriptografa o desafio e envia a resposta de volta ao servidor. Se a resposta estiver correta, a autenticação é bem-sucedida. Um erro "Permission Denied (publickey)" significa que essa troca falhou em algum momento.
Causas Comuns de 'Permission Denied (publickey)'
O erro "Permission Denied (publickey)" pode resultar de vários problemas de configuração. Identificar a causa raiz geralmente envolve verificar sistematicamente os seguintes componentes:
- Permissões de Arquivo Incorretas: O SSH é altamente sensível às permissões de arquivos e diretórios por razões de segurança. Permissões incorretas no seu diretório local
~/.ssh, no arquivo de chave privada, ou no diretório~/.sshe no arquivoauthorized_keysdo lado do servidor podem impedir a autenticação. - Entrada Ausente ou Incorreta em
authorized_keys: O arquivoauthorized_keysdo servidor deve conter a chave pública correta para o usuário ao qual você está tentando fazer login. Se a chave estiver faltando, malformada ou associada ao usuário errado, a autenticação falhará. - Associação Incorreta do Par de Chaves: Seu cliente SSH pode estar oferecendo a chave privada errada, ou o servidor pode não ter a chave pública correspondente listada no arquivo
authorized_keys. - Problemas com o Agente SSH: Se você estiver usando um agente SSH, ele pode não estar carregado corretamente com sua chave privada ou pode estar configurado incorretamente.
- Configuração SSH do Lado do Servidor: Embora menos comum para este erro específico, a configuração do daemon SSH do servidor (
sshd_config) pode ter restrições específicas sobre a autenticação por chave pública.
Guia de Solução de Problemas Passo a Passo
Vamos analisar as etapas práticas para diagnosticar e corrigir esses problemas.
1. Verifique a Chave Privada Local e as Permissões
Sua configuração SSH local é o primeiro lugar para verificar. Certifique-se de que sua chave privada seja acessível e tenha as permissões corretas.
Verificando a Existência da Chave Privada
Sua chave privada geralmente está localizada em ~/.ssh/id_rsa (ou id_ed25519, id_dsa, etc.).
Verificando as Permissões de Arquivo Locais
O diretório ~/.ssh e seu arquivo de chave privada devem ter permissões restritivas para evitar acesso não autorizado.
- Diretório
~/.ssh: Deve ser700(drwx------). - Arquivo de chave privada (ex:
id_rsa): Deve ser600(-rw-------).
Use o comando chmod para definir as permissões corretas:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
Dica: Se você estiver usando um nome de chave diferente, substitua id_rsa pelo nome do arquivo da sua chave privada real.
2. Verifique a Configuração authorized_keys do Lado do Servidor
Este é frequentemente o culpado mais comum. O servidor deve ter sua chave pública listada corretamente para o usuário que você está tentando autenticar.
Acessando o Servidor (se possível)
Se você ainda puder acessar o servidor por outro método (por exemplo, autenticação por senha, outra conta de usuário ou um console), faça login para verificar o arquivo authorized_keys.
Verificando o Local do Arquivo authorized_keys
O arquivo authorized_keys geralmente está localizado em ~/.ssh/authorized_keys dentro do diretório home do usuário que você está tentando fazer login.
Verificando as Permissões de Arquivo do Lado do Servidor
Semelhante ao lado do cliente, as permissões do lado do servidor são críticas:
- Diretório
~/.sshno servidor: Deve ser700(drwx------). - Arquivo
authorized_keysno servidor: Deve ser600(-rw-------).
Certifique-se de que essas permissões estejam configuradas corretamente no servidor:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Verificando o Conteúdo de authorized_keys
Abra o arquivo ~/.ssh/authorized_keys usando um editor de texto (por exemplo, nano, vim). Cada chave pública deve estar em uma única linha. Certifique-se de que a chave pública que você espera usar esteja presente e formatada corretamente. Ela deve começar com ssh-rsa, ssh-ed25519 ou semelhante, seguida por uma longa sequência de caracteres e, opcionalmente, um comentário.
Exemplo de entrada em authorized_keys:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD... sua_string_da_chave_publica usuario@hostname
Importante: Não adicione sua chave privada a authorized_keys. Apenas a chave pública deve estar aqui.
3. Garanta que a Chave Pública Correta Foi Adicionada
É possível que a chave pública errada tenha sido copiada ou que a chave pública no servidor não corresponda à sua chave privada local.
Recuperando Sua Chave Pública Local
Sua chave pública é a contraparte da sua chave privada. Você pode visualizá-la usando o comando ssh-keygen:
cat ~/.ssh/id_rsa.pub
Este comando exibirá sua chave pública. Compare esta saída cuidadosamente com a entrada no arquivo ~/.ssh/authorized_keys do servidor. Mesmo um único erro de digitação ou caractere ausente fará com que a autenticação falhe.
Dica: Uma maneira rápida de adicionar sua chave pública, se você tiver acesso por senha ao servidor, é usando ssh-copy-id.
ssh-copy-id usuario@seu_ip_do_servidor
Este comando anexa automaticamente sua chave pública padrão (~/.ssh/id_rsa.pub) ao arquivo ~/.ssh/authorized_keys no servidor remoto e define as permissões corretas.
4. Especifique a Chave Privada Correta (se não for a padrão)
Se você estiver usando uma chave privada não padrão (por exemplo, ~/.ssh/minha_outra_chave), você precisa informar ao seu cliente SSH qual chave usar.
Usando a Flag -i
Você pode especificar o arquivo de identidade (chave privada) com a opção -i:
ssh -i ~/.ssh/minha_outra_chave usuario@seu_ip_do_servidor
Configurando ~/.ssh/config
Para conveniência, você pode configurar seu cliente SSH para sempre usar uma chave específica para um determinado host:
Crie ou edite o arquivo ~/.ssh/config em sua máquina local e adicione uma entrada como esta:
Host alias_do_seu_servidor
HostName seu_ip_ou_dominio_do_servidor
User seu_nome_de_usuario
IdentityFile ~/.ssh/minha_outra_chave
Em seguida, você pode se conectar simplesmente usando:
ssh alias_do_seu_servidor
5. Verifique o Status do Agente SSH
Se você depende de um agente SSH para gerenciar suas chaves, certifique-se de que ele esteja em execução e que sua chave esteja carregada.
Verificando se o Agente Está em Execução
echo "$SSH_AUTH_SOCK"
Se isso exibir um caminho, o agente provavelmente está em execução. Se estiver vazio, talvez você precise iniciar um.
Adicionando Chave ao Agente
Se sua chave não estiver carregada, adicione-a:
ssh-add ~/.ssh/id_rsa
Se for solicitada uma senha, insira-a. Você pode verificar quais chaves foram adicionadas com ssh-add -l.
6. Depuração com Modo Detalhado (Verbose)
O SSH tem um modo detalhado (-v, -vv, ou -vvv para níveis crescentes de detalhes) que pode fornecer pistas inestimáveis sobre onde o processo de autenticação está falhando.
ssh -vvv usuario@seu_ip_do_servidor
Examine a saída em busca de mensagens relacionadas à autenticação por chave, oferecimento de chaves e respostas do servidor. Isso geralmente aponta diretamente para o problema.
Exemplo de trecho de saída detalhada indicando uma falha de publickey:
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/id_rsa
debug1: read PEM private key file /home/user/.ssh/id_rsa
debug1: failed to use sshkey: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: password
Esta saída pode indicar que o cliente tentou usar id_rsa, mas falhou, e então passou para outros métodos.
7. Revisão do sshd_config do Lado do Servidor (Avançado)
Embora menos comum para erros específicos de publickey (geralmente outros erros apareceriam), vale a pena notar o arquivo de configuração do daemon SSH do servidor (/etc/ssh/sshd_config). Certifique-se de que PubkeyAuthentication yes não esteja comentado e esteja definido como yes. Após fazer quaisquer alterações, o serviço SSH deve ser recarregado ou reiniciado (por exemplo, sudo systemctl reload sshd ou sudo systemctl restart sshd).
Resumo e Melhores Práticas
A solução de problemas dos erros SSH "Permission Denied (publickey)" envolve uma verificação metódica das configurações do cliente e do servidor. As causas mais frequentes estão relacionadas a permissões de arquivo incorretas nos arquivos ~/.ssh e authorized_keys, e incompatibilidades entre a chave pública no servidor e a chave privada no cliente.
Principais Pontos a Lembrar:
- Permissões são fundamentais: Sempre garanta que
~/.sshseja700e que as chaves privadas/authorized_keyssejam600no cliente e no servidor. - Precisão da chave pública: Verifique novamente se a chave pública exata está presente no arquivo
authorized_keysdo servidor. - Use
ssh-copy-id: Quando possível, esta é a maneira mais segura e fácil de configurar a autenticação por chave pública. - Modo Detalhado: Utilize
ssh -vvvpara obter saídas de diagnóstico detalhadas.
Seguindo estas etapas, você deverá ser capaz de diagnosticar e resolver a maioria dos problemas de "Permission Denied (publickey)", restaurando o acesso remoto seguro aos seus servidores.