Ir para o conteúdo

Como faço para me conectar à minha instância do Amazon EC2 se eu perder meu par de chaves SSH após a execução da instância?

7 minuto de leitura
0

Quero me conectar a uma instância do Amazon Elastic Compute Cloud (Amazon EC2), mas perdi o par de chaves SSH.

Breve descrição

Para se conectar a uma instância do EC2 quando você perder seu par de chaves SSH, use um dos seguintes métodos:

  • Insira os dados do usuário para criar um novo par de chaves.
  • Para instâncias que são nós gerenciados, use o AWS Systems Manager para recuperar seu par de chaves.
  • Para instâncias que executam o Amazon Linux 2 (AL2) versão 2.0.20190618 e posterior ou o Amazon Linux 2023 (AL2023), use o EC2 Instance Connect.
  • Se você conseguir acessar sua instância e tiver acesso ao Console de Série do EC2, use o console serial.
    Observação: esse método não exige que você interrompa e execute sua instância.
  • Crie uma instância de resgate para criar uma nova chave pública.

Importante: antes de parar e iniciar sua instância, execute as seguintes ações:

Observação: além disso, quando você interrompe ou executa uma instância, o endereço IP público da instância muda. Ao rotear tráfego externo para sua instância, é uma prática recomendada usar um endereço IP elástico em vez de um endereço IP público.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Inserir um script de dados do usuário

Importante: não armazene dados sensíveis em scripts de dados do usuário. Em vez disso, use métodos seguros, como o AWS Secrets Manager.

Se sua instância não tiver acesso ao cloud-init ou se você tiver problemas com o cloud-init, acesse Usar uma instância de resgate.

Criar novo par de chaves

Conclua as etapas a seguir:

  1. Crie outro par de chaves.
  2. Se você criou a chave privada pelo console do Amazon EC2, recupere a chave pública do par de chaves.
  3. Abra o console do Amazon EC2.
  4. Interrompa a instância.
  5. Escolha Ações e, em seguida, escolha Configurações da instância.
  6. Escolha Editar dados do usuário e insira o seguinte script:
    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:
    - [users-groups, once]
    users:
    - name: username
    ssh-authorized-keys:
    - PublicKeypair
    Observação: substitua username pelo nome de usuário padrão ou por um nome de usuário personalizado criado anteriormente. Substitua PublicKeypair pela chave pública. Ao inserir toda a chave pública, comece com ssh-rsa.
  7. Escolha Salvar.
  8. Execute sua instância.

Confirme se a fase do cloud-init foi concluída

Na saída do console da instância, verifique os seguintes fatores para garantir que a fase do cloud-init esteja concluída:

  • Não há mensagens de erro.
  • Todas as diretivas do cloud-init são listadas como Executadas.
  • Você vê uma mensagem de Concluído para cloud-init semelhante ao exemplo a seguir: “Finished [0;1;39mCloud-init: Final Stage[0m Cloud-init v. A.B.C finished at ..”.

Remover os comandos dos dados do usuário da instância

Conclua as etapas a seguir:

  1. Interrompa a instância.
  2. Escolha Ações e, em seguida, escolha Configurações da instância.
  3. Escolha Editar dados do usuário e, em seguida, limpe todo o conteúdo do campo.
  4. Escolha Salvar.
  5. Execute sua instância.

Use o Systems Manager

Para recuperar uma instância que é um nó gerenciado no Systems Manager, use o runbook AWSSupport-ResetAccess para recuperar o par de chaves. O AWSSupport-ResetAccess usa o EC2Rescue para gerar e adicionar automaticamente um novo par de chaves SSH na instância.

O Systems Manager criptografa e salva a nova chave privada SSH para sua instância no Parameter Store, um recurso do AWS Systems Manager como /ec2rl/openssh/instance_id/key.

Para obter a chave SSH privada do Parameter Store, execute o comando get-parameters da AWS CLI:

aws ssm get-parameters --names "/ec2rl/openssh/instance_id/key" --with-decryption --output json --query  "Parameters[0].Value" | sed 's:\\n:\n:g; s:^"::; s:"$::' >  key-pair-name

Observação: substitua instance_id pelo ID da instância e key-pair-name pelo nome do par de chaves.

Em seguida, crie um novo arquivo .pem com o valor do parâmetro como conteúdo. Use o arquivo.pem para se reconectar à sua instância inacessível.

Execute o comando a seguir para converter a chave privada em um arquivo .pem:

ssh-keygen -f key-pair-name -e -m pem > key-pair-name.pem

Observação: substitua key-pair-name pelo nome do par de chaves.

O runbook de automação cria uma imagem de máquina da Amazon (AMI) de backup ativada por senha. O Amazon EC2 não exclui automaticamente a nova AMI, então ela permanece na sua conta da AWS.

Para localizar a AMI, conclua as seguintes etapas:

  1. Abra o console do Amazon EC2.
  2. Escolha AMIs.
  3. Insira o ID de automação na barra de pesquisa.

Use o EC2 Instance Connect

Para se conectar a uma instância Amazon Linux, consulte Conectar-se a uma instância Linux usando o EC2 Instance Connect.

usar o Console de Série do EC2

Se for possível acessar o Console de Série do EC2 para Linux, poderá usá-lo para solucionar problemas de tipos de instâncias compatíveis baseadas em Nitro. Para obter mais informações, consulte Configurar o acesso ao Console de Série do EC2.

Usar uma instância de resgate

Conclua as etapas a seguir:

  1. Interrompa a instância.

  2. Separe o volume raiz do EBS da instância.

  3. Execute uma instância de resgate na mesma zona de disponibilidade da instância original.

  4. Anexe o volume raiz da instância original à instância de resgate como um volume secundário.

  5. Execute a instância de resgate.

  6. Para obter o nome do dispositivo de volume raiz, execute o seguinte comando:

    sudo lsblk -f

    Exemplo de saída:

    NAME FSTYPE LABEL UUID MOUNTPOINT
    xvda └─xvda1 xfs 1234abcd-56ef-78gh-90ij-1234klmnopqr /
     xvdf └─xvdf1 xfs abcd1234-ef56-gh78-ij90-qr1234klmnop
  7. Para montar o volume anexado à instância de resgate, execute os seguintes comandos:

    sudo mkdir /mnt/target
    sudo mount /dev/xvdf1 /mnt/target

    Observação: substitua /dev/xvdf1 pelo nome do dispositivo de volume raiz da instância original.

  8. Para criar uma nova chave pública, execute o seguinte comando:

    sudo mkdir -p /mnt/target/home/USER/.ssh
    echo "your_new_public_key" | sudo tee -a /mnt/target/home/USER/.ssh/authorized_keys

    Observação: substitua USER pelo nome de usuário da instância original e your_new_public_key pela sua chave pública. O nome da chave pública começa com ssh-rsa.

  9. Para configurar o acesso à chave na instância, execute o seguinte comando:

    OS_USER=os-user
    sudo chown -R $OS_USER:$OS_USER /mnt/target/home/$OS_USER/.ssh
    sudo chmod 700 /mnt/target/home/$OS_USER/.ssh
    sudo chmod 600 /mnt/target/home/$OS_USER/.ssh/authorized_keys

    Observação: substitua os-user pelo nome de usuário associado à AMI que você usou para executar sua instância.

  10. Para desmontar o volume, execute o seguinte comando:

sudo umount /mnt/target
  1. Separe o volume da instância de resgate e anexo-o novamente à instância original.
  2. Execute a instância original.