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:
- Crie outro par de chaves.
- Se você criou a chave privada pelo console do Amazon EC2, recupere a chave pública do par de chaves.
- Abra o console do Amazon EC2.
- Interrompa a instância.
- Escolha Ações e, em seguida, escolha Configurações da instância.
- 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.
- Escolha Salvar.
- 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:
- Interrompa a instância.
- Escolha Ações e, em seguida, escolha Configurações da instância.
- Escolha Editar dados do usuário e, em seguida, limpe todo o conteúdo do campo.
- Escolha Salvar.
- 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:
- Abra o console do Amazon EC2.
- Escolha AMIs.
- 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:
-
Interrompa a instância.
-
Separe o volume raiz do EBS da instância.
-
Execute uma instância de resgate na mesma zona de disponibilidade da instância original.
-
Anexe o volume raiz da instância original à instância de resgate como um volume secundário.
-
Execute a instância de resgate.
-
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
-
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.
-
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.
-
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.
-
Para desmontar o volume, execute o seguinte comando:
sudo umount /mnt/target
- Separe o volume da instância de resgate e anexo-o novamente à instância original.
- Execute a instância original.