Estou recebendo erros de "Permissão negada (chave pública)" ou "Falha na autenticação, permissão negada" ao tentar acessar minha instância do EC2. Como resolvo isso?

Data da última atualização: 9/1/2023

Estou recebendo os erros “Permission denied (publickey)” (Permissão negada [chave pública]) ou “Authentication failed, permission denied” (Falha na autenticação, permissão negada) ao acessar minha instância do Amazon Elastic Compute Cloud (Amazon EC2). Como resolvo isso?

Breve descrição

Os erros “Permission denied (publickey)” (Permissão negada [chave pública]) e “Authentication failed, permission denied” (Falha na autenticação, permissão negada) ocorrem quando:

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

Resolução

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

Para obter uma lista de nomes de usuário válidos, consulte Erro: o servidor recursou nossa chave ou Não há métodos de autenticação compatíveis.

Verifique se as permissões de arquivo no sistema operacional estão corretas e se a chave pública SSH correta está no arquivo authorized_keys

Existem quatro métodos para executar essas tarefas:

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

Se você ativou o Console de Série do EC2 para Linux, poderá usá-lo para solucionar problemas de tipos de instância baseados em Nitro compatíveis. O console de série serial ajuda você a solucionar problemas de inicialização, configuração de rede e problemas de configuração SSH. O console de série se conecta à sua instância sem a necessidade de uma conexão de rede ativa. 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. Em seguida, crie políticas do AWS Identity and Access Management (IAM) que concedam acesso aos seus 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 serial, 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 fazer correções

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

Obrigatório: a instalação do SSM Agent é necessária para usar esse método. Para obter mais informações sobre o Session Manager e uma lista completa de pré-requisitos, consulte Configurar o Session Manager.

1.    Abra o console do AWS Systems Manager.

2.    Inicie uma sessão.

3.    Use o comando ls -ld para garantir que as permissões dos arquivos no diretório home estejam corretas. Veja a seguir uma lista das permissões corretas:

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

Veja a seguir 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 sua chave SSH. No exemplo a seguir, substitua a chave de exemplo pela 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 seguintes comandos na 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 à instância usando SSH.

Método 3: executar o procedimentoAWSSupport-TroubleshootSSH Automation

AWSSupport-TroubleshootSSH instala a ferramenta Amazon EC2Rescue. Após a instalação, a ferramenta verifica e corrige alguns problemas que causam erros de conexão remota ao se conectar a uma máquina Linux via SSH. Para obter mais informações, consulte Como posso usar 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 sua instância for apoiada pelo armazenamento de instância ou tiver volumes de armazenamento de instâncias contendo dados, esses dados serão perdidos quando a instância for interrompida. Para obter mais informações, consulte Determinar o tipo de dispositivo raiz da sua instância.
  • Se a instância fizer parte de um grupo do Amazon EC2 Auto Scaling, sua interrupção poderá encerrá-lo. As instâncias executadas com o Amazon EMR, o AWS CloudFormation ou o AWS Elastic Beanstalk podem fazer parte de um grupo do AWS Auto Scaling. O encerramento da instância nesse cenário depende das configurações de proteção contra redução de horizontal de escala da instância para seu 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.
  • O ato de interromper e iniciar a instância altera seu endereço IP público. É uma prática recomendada usar um endereço IP elástico em vez de um endereço IP público ao rotear o tráfego externo para sua instância.

1.    Abra o console do Amazon EC2.

2.    Escolha Instances (Instâncias) no painel de navegação e selecione a instância que você está tentando iniciar.

3.    Pare 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 seguinte script de dados do usuário 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ê executou sua instância. Para obter mais informações, consulte Obter o nome de usuário padrão da AMI que você usou para executar sua instância, em Causas comuns para 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, anexe a chave correta ao script de dados do usuário criado na etapa 5. Se a assinatura corresponder, você pode pular essa etapa. Anexe a chave pública SSH ao script de dados do usuário, conforme mostrado no exemplo a seguir. Substitua a chave de exemplo pela 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ê executou sua instância. Para obter mais informações, consulte Obter o nome de usuário padrão da AMI que você usou para executar sua instância, em Causas comuns para problemas de conexão.

8.    Execute sua instância.

Observação: o script de dados do usuário anterior é definido para ser executado a cada reinicialização da instância. Depois de recuperar o acesso à sua instância, remova o script de dados do usuário.

Para remover dados do usuário:

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