Solução de Problemas de Permissão Negada de Chave Pública SSH

Está a deparar-se com 'Permission Denied (publickey)' ao usar SSH? Este guia oferece um passo a passo abrangente para resolver este erro comum de autenticação. Aprenda a verificar meticulosamente os pares de chaves SSH, diagnosticar permissões de arquivo incorretas tanto no cliente quanto no servidor e garantir que o seu arquivo `authorized_keys` esteja configurado corretamente. Com exemplos práticos e instruções passo a passo, você recuperará o acesso seguro aos seus sistemas remotos.

26 visualizações

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 ~/.ssh e no arquivo authorized_keys do lado do servidor podem impedir a autenticação.
  • Entrada Ausente ou Incorreta em authorized_keys: O arquivo authorized_keys do 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 ser 700 (drwx------).
  • Arquivo de chave privada (ex: id_rsa): Deve ser 600 (-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 ~/.ssh no servidor: Deve ser 700 (drwx------).
  • Arquivo authorized_keys no servidor: Deve ser 600 (-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 ~/.ssh seja 700 e que as chaves privadas/authorized_keys sejam 600 no cliente e no servidor.
  • Precisão da chave pública: Verifique novamente se a chave pública exata está presente no arquivo authorized_keys do 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 -vvv para 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.