Por que recebo o erro “O servidor recusou nossa chave” quando tento me conectar à minha instância do EC2 por meio de SSH?

7 minuto de leitura
0

Eu recebo o erro “O servidor recusou nossa chave” quando me conecto à minha instância do Amazon Elastic Compute Cloud (Amazon EC2) por meio de SSH.

Breve descrição

Há vários motivos pelos quais um servidor SSH (sshd) recusa uma chave SSH privada. Confira a seguir alguns motivos comuns pelos quais é possível receber esse erro:

Resolução

Você usa o nome de usuário incorreto para sua AMI ao tentar se conectar à sua instância do Amazon EC2

Os nomes de usuário usuais são ec2-user, ubuntu, centos, root ou admin. Para obter uma lista de nomes de usuário válidos, consulte Erro: O servidor recusou nossa chave ou Não há métodos de autenticação compatíveis.

O usuário foi excluído do servidor ou a conta da AWS foi bloqueada

Se o usuário que tentar acessar a instância for excluído do servidor, adicione-o novamente como um novo usuário. Para obter mais informações, consulte Como adiciono novas contas de usuário com acesso do SSH a instâncias do Amazon EC2 do Linux?

Há problemas de permissão na instância, ou você não tem um diretório

Há quatro métodos para verificar permissões e diretórios na instância:

Método 1: usar o console de série do EC2

Se você ativou o console de série do Amazon EC2 para Linux, poderá usá-lo para solucionar problemas de tipos de instâncias compatíveis com base em Nitro. É possível acessar o console de série por meio do console do Amazon EC2 ou da AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte Configurar o acesso ao Console de Série do EC2.

Método 2: Usar o Gerenciador de Sessões do AWS Systems Manager para fazer login na instância e verificar as permissões

Observação: 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 stat para garantir que as permissões dos arquivos no diretório home estejam corretas. Veja a seguir uma lista das permissões corretas:
    Diretório inicial do Linux, /home, (0755/drwxr-xr-x).
    Diretório inicial do usuário, /home/ec2-user/, (0700/drwx------).
    Permissão de diretório.ssh, /home/ec2-user/.ssh, (0700/drwx------).
    Permissão de arquivo authorized_keys, /home/ec2-user/.ssh/authorized_keys, (0600/-rw-------).
    Veja a seguir um exemplo do comando stat e da saída. Neste exemplo, ec2-user é o nome do usuário. Altere o nome de usuário para sua AMI específica:

    $ stat /home/ec2-user/  File: '/home/ec2-user/'
      Size: 4096          Blocks: 8          IO Block: 4096   directory
    Device: 10301h/66305d    Inode: 18322       Links: 3
    Access: (0700/drwx------)  Uid: (  500/ec2-user)   Gid: (  500/ec2-user)
  4. Se as permissões não corresponderem aos valores anteriores, execute os seguintes comandos:

    $ 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
  5. Encerre a sessão.

  6. SSH para sua instância.

Método 3: Para corrigir automaticamente os problemas que causam o erro, execute o documento AWSSupport-TroubleshootSSH document

O documento de automação AWSSupport-TroubleshootSSH instala a ferramenta Amazon EC2Rescue na instância. Em seguida, o documento de automação verifica e corrige problemas que causam erros de conexão remota durante a conexão de uma máquina Linux por meio de SSH. Para obter mais informações, consulte Estou recebendo erros ao tentar me conectar à minha instância do EC2 usando SSH. Como posso usar o fluxo de trabalho de automação AWSSupport-TroubleshootSSH para solucionar problemas de conexão SSH?

Método 4: Usar dados do usuário para corrigir permissões na instância

Importante:

  • Esse procedimento de recuperação exige que você pare e inicie sua instância. Quando você faz isso, os dados nos volumes de armazenamento de instância são perdidos. Para obter mais informações, consulte Volumes raiz para suas instâncias do Amazon EC2.
  • Se sua instância fizer parte de um grupo do Amazon EC2 Auto Scaling, a instância poderá ser encerrada quando for interrompida. Isso também pode ocorrer em instâncias lançadas por serviços que usam o AWS Auto Scaling, como o Amazon EMR, o AWS CloudFormation ou o AWS Elastic Beanstalk. O fim da instância nesse cenário depende das configurações de proteção contra redução de instâncias para seu grupo do Auto Scaling. Se sua instância fizer parte de um grupo do Auto Scaling, remova a instância do grupo do Auto Scaling antes de iniciar as etapas de resolução. É possível adicionar a instância de volta ao grupo do Auto Scaling depois de concluir as etapas de resolução.
  • A interrupção e reinicialização da instância altera o endereço IP público da sua instância. Ao rotear tráfego externo para sua instância, é prática recomendada usar um endereço IP elástico em vez de um endereço IP público.
  • Não é possível alterar a chave SSH usando dados do usuário se o dispositivo raiz da instância for um volume de armazenamento de instância. Para obter mais informações, consulte Volumes raiz para suas instâncias do Amazon EC2.
  • As atualizações dos dados de usuário da sua instância se aplicam a todas as distribuições que oferecem suporte às diretivas cloud-init. O Cloud-init deve ser instalado e configurado. Para obter mais informações, consulte SSH - Configurar chaves SSH e SSH no site Cloud-init.

Conclua as seguintes etapas:

  1. Abra o console do Amazon EC2 e escolha sua instância.

  2. Escolha Estado da instância e depois Parar instância.
    Observação: se a opção Parar não estiver disponível, significa que a instância já está parada ou seu dispositivo raiz é um volume de armazenamento de instância.

  3. Escolha Ações, escolha Configurações da instância e escolha Editar dados do usuário.

  4. Copie o comando a seguir no campo Dados do usuário e selecione Salvar. Certifique-se de copiar todo o comando e não adicionar espaços extras.
    Observação: o comando a seguir usa o nome de usuário ec2-user. Altere ec2-user para o nome de usuário da sua AMI.

    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
    chown root:root /home
    chmod 755 /home
    chown ec2-user:ec2-user /home/ec2-user -R
    chmod 700 /home/ec2-user /home/ec2-user/.ssh
    chmod 600 /home/ec2-user/.ssh/authorized_keys
    --//
  5. Inicie a instância e, em seguida, use SSH para conectar-se à instância.
    Observação: por padrão, o comando de dados do usuário é executado uma vez por instância. Esse procedimento altera o comportamento padrão para adicionar a chave pública a cada reinicialização, parada ou início da instância. Para restaurar o comportamento padrão, remova os dados personalizados do usuário. É uma prática recomendada seguir os protocolos de segurança e permitir que os dados do usuário sejam executados após a primeira inicialização de uma instância. É possível modificar os dados do usuário de uma instância com o método da API ModifyInstanceAttribute. Para restringir o acesso a esse método, use políticas do IAM.

Informações relacionadas

Conecte-se à sua instância Linux usando PuTTY

Pares de chaves do Amazon EC2 e instâncias do Amazon EC2

Como posso solucionar problemas de conexão com minha instância Linux do Amazon EC2 usando SSH?

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses