Estou recebendo as mensagens de erro “Permission denied (publickey)” (Permissão negada [chave pública]) ou “Authentication failed, permission denied” (Falha na autenticação, permissão negada) ao tentar acessar minha instância do EC2. Como resolvo isso?

Data da última atualização: 20/05/2022

Estou recebendo os erros “Permission denied (publickey)” ou “Authentication failed, permission denied” ao acessar minha instância do Amazon Elastic Compute Cloud (Amazon EC2). Como resolvo isso?

Breve descrição

Os erros “Permission denied (publickey)” e “Authentication failed, permission denied” ocorrem se:

  • Você está tentando se conectar usando o nome de usuário errado para sua AMI.
  • As permissões do arquivo no sistema operacional estão incorretas na instância.
  • O arquivo de chave pública SSH (.pub) incorreto está no arquivo authorized_keys.

Resolução

Confirmar se você está usando o nome de usuário correto para sua AMI

Verifique se as permissões do arquivo no sistema operacional estão corretas e se o arquivo authorized_keys contém a chave pública SSH correta

Há quatro métodos para realizar essas tarefas:

Método 1: usar a Console de Série do EC2

Se você tiver ativado a Console de Série do EC2 para Linux, poderá usá-la para solucionar problemas de tipos de instância baseados em Nitro compatíveis. O Console de Série ajuda na solução de problemas de inicialização, configuração de rede e configuração de SSH. Ele se conecta à instância sem a necessidade de uma conexão ativa à rede. Você pode acessar o Console de Série usando o console do Amazon EC2 ou a AWS Command Line Interface (AWS CLI).

Antes de usar o console de série, conceda acesso a ele no nível da conta. Depois, crie políticas do AWS Identity and Access Management (IAM) que concedam o acesso aos usuários do IAM. Além disso, todas as instâncias que usam o console precisam ter pelo menos um usuário com senha. Se não for possível estabelecer contato com a instância e você não tiver configurado o acesso ao Console de Série, siga as instruções nos métodos 2, 3 ou 4. Para obter informações sobre como configurar o Console de Série do EC2 para Linux, consulte Configurar o acesso ao Console de Série do EC2.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

Método 2: usar o AWS Systems Manager Session Manager para fazer login na instância e realizar correções

Este método atualiza as permissões e injeta sua chave pública SSH no arquivo authorized_keys.

Observação: é necessário instalar o SSM Agent para usar esse método. Para mais informações sobre o Session Manager e uma lista completa de pré-requisitos, consulte Configuração do Session Manager.

1.    Abra o console do AWS Systems Manager.

2.    Inicie uma sessão.

3.    Use o comando ls -ld para verificar se as permissões dos arquivos no diretório home estão corretas. A seguir, apresentamos uma lista das permissões corretas.

  • Por exemplo, o diretório inicial do Linux, /home, deve ser (0755/drwxr-xr-x).
  • Por exemplo, o diretório inicial do usuário, /home/ec2-user/, deve ser (0700/drwx-----).
  • Por exemplo, a permissão do diretório .ssh, /home/ec2-user/.ssh, deve ser (0700/drwx------).
  • Por exemplo, a permissão do arquivo authorized_keys, /home/ec2-user/.ssh/authorized_keys, deve ser (0600/-rw-------).

A seguir apresentamos um exemplo do comando ls -ld e da saída resultante. Neste exemplo, ec2-user é o nome do usuário. Altere o nome de usuário de acordo com sua AMI específica.

$ ls -ld /home/ec2-user/
drwx------ 3 ec2-user ec2-user 4096 Apr  1 08:31 /home/ec2-user/

4.    No computador local, verifique a chave pública SSH.

5.    Se a assinatura da chave pública SSH não estiver presente na saída, atualize o arquivo authorized_keys para permitir a chave SSH. No exemplo a seguir, substitua a chave do exemplo por sua chave pública SSH.

$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys

6.    Para corrigir as permissões, execute os comandos a seguir em sua instância do EC2.

$ sudo chown root:root /home
$ sudo chmod 755 /home
$ sudo chown ec2-user:ec2-user /home/ec2-user -R
$ sudo chmod 700 /home/ec2-user /home/ec2-user/.ssh
$ sudo chmod 600 /home/ec2-user/.ssh/authorized_keys

7.    Encerre a sessão.

8.    Conecte-se à sua instância usando SSH.

Método 3: executar o procedimento AWSSupport-TroubleshootSSH Automation

AWS Support-TroubleshootSSH instala a ferramenta Amazon EC2Rescue. Após a instalação, a ferramenta verifica e corrige alguns problemas que podem causar erros de conexão remota ao estabelecer conexão com uma máquina Linux por SSH. Para mais informações, consulte Como uso o fluxo de trabalho AWSSupport-TroubleshootSSH Automation para solucionar problemas de conexão SSH?

Método 4: usar um script de dados do usuário para reparar permissões SSH e adicionar a chave pública SSH correta ao arquivo authorized_keys

Importante

  • Se a instância tiver um backup no armazenamento de instância ou tiver volumes com dados no armazenamento de instância, os dados serão perdidos quando a instância for interrompida. Para obter mais informações, consulte Determinar o tipo de dispositivo raiz da instância.
  • Se a instância fizer parte de um grupo do Amazon EC2 Auto Scaling, a interrupção da instância poderá terminá-la. Instâncias iniciadas com o Amazon EMR, o AWS CloudFormation ou o AWS Elastic Beanstalk podem integrar um grupo do AWS Auto Scaling. O encerramento da instância nesse cenário depende das configurações de proteção de redução da escala da instância para o grupo do Auto Scaling. Se sua instância fizer parte de um grupo do Auto Scaling, remova temporariamente a instância do grupo do Auto Scaling antes de iniciar as etapas de resolução.
  • Interromper e iniciar a instância altera o endereço IP público da sua instância. Uma das práticas recomendadas é usar um endereço IP elástico em vez de um endereço IP público ao rotear o tráfego externo para a sua instância.

1.    Abra o console do Amazon EC2.

2.    Escolha Instances (Instâncias) no painel de navegação e, em seguida, selecione a instância que está tentando executar.

3.    Interrompa a instância.

4.    Escolha Actions (Ações), Instance settings (Configurações da instância), Edit User Data (Editar dados do usuário).

5.    Copie o script de dados do usuário a seguir na caixa de diálogo Edit User Data (Editar dados do usuário) e escolha Save (Salvar).

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
OS_USER=@@@@@@
chown root:root /home 
chmod 755 /home
chown $OS_USER:$OS_USER /home/$OS_USER -R
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
--//

Observação: substitua o valor de OS_USER pelo nome de usuário associado à AMI da qual você iniciou a instância. Para obter mais informações, consulte Saber o nome de usuário padrão da AMI usado para iniciar a instância em Causas comuns de problemas de conexão.

6.    No computador local, verifique a chave pública SSH.

7.    Se a assinatura da chave pública SSH não estiver presente na saída, acrescente a chave correta ao script de dados do usuário criado na etapa 5. Se a assinatura corresponder, pule esta etapa. Acrescente a chave pública SSH ao script de dados do usuário conforme exibido no exemplo a seguir. Substitua a chave do exemplo por sua chave pública SSH.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
OS_USER=@@@@@@
chown root:root /home 
chmod 755 /home
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/$OS_USER/.ssh/authorized_keys
chown $OS_USER:$OS_USER/home/$OS_USER -R
--//

Observação: substitua o valor de OS_USER pelo nome de usuário associado à AMI da qual você iniciou a instância. Para obter mais informações, consulte Saber o nome de usuário padrão da AMI usado para iniciar a instância em Causas comuns de problemas de conexão.

8.    Inicie sua instância.

Observação: o script anterior de dados do usuário está configurado para execução em todas as reinicializações da instância. Após retomar o acesso à sua instância, remova o script de dados do usuário.

Para remover dados do usuário:

  • Execute as etapas 1 a 4 desta seção.
  • Exclua o script de dados do usuário na caixa de diálogo Edit User Data (Editar dados do usuário).