Passer au contenu

Comment puis-je me connecter à mon instance Amazon EC2 si je perds ma paire de clés SSH après le lancement initial de l'instance ?

Lecture de 7 minute(s)
0

Je souhaite me connecter à mon instance Amazon Elastic Compute Cloud (Amazon EC2), mais j’ai perdu la paire de clés SSH.

Brève description

Pour vous connecter à une instance EC2 lorsque vous perdez votre paire de clés SSH, utilisez l'une des méthodes suivantes :

  • Entrez les données utilisateur pour créer une nouvelle paire de clés.
  • Pour les instances qui sont des nœuds gérés, utilisez AWS Systems Manager pour récupérer votre paire de clés.
  • Pour les instances qui exécutent Amazon Linux 2 (AL2) version 2.0.20190618 et versions ultérieures ou Amazon Linux 2023 (AL2023), utilisez EC2 Instance Connect.
  • Si vous pouvez accéder à votre instance et que vous avez accès à l’EC2 Serial Console, utilisez la console série.
    Remarque : Cette méthode ne nécessite pas l’arrêt et le démarrage de votre instance.
  • Créez une instance de secours pour créer une nouvelle clé publique.

Important : Avant d'arrêter et de démarrer votre instance, effectuez les actions suivantes :

Remarque : Lorsque vous arrêtez et démarrez une instance, son adresse IP publique change. Une bonne pratique consiste à utiliser une adresse IP Elastic pour acheminer le trafic externe vers votre instance au lieu d'une adresse IP publique.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Saisir un script de données utilisateur

Important : Ne stockez pas de données sensibles dans les scripts de données utilisateur. Utilisez plutôt des méthodes sécurisées telles qu'AWS Secrets Manager.

Si votre instance n'a pas accès à cloud-init ou si vous rencontrez des problèmes avec cloud-init, passez à la section Utiliser une instance de secours.

Créer la nouvelle paire de clés

Procédez comme suit :

  1. Créez une nouvelle paire de clés.
  2. Si vous créez la clé privée dans la console Amazon EC2, récupérez la clé publique de la paire de clés.
  3. Ouvrez la console Amazon EC2.
  4. Arrêtez votre instance.
  5. Sélectionnez Actions, puis Paramètres de l’instance.
  6. Sélectionnez Modifier les données utilisateur, puis entrez le script suivant :
    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
    Remarque : Remplacez nom d’utilisateur par le nom d'utilisateur par défaut ou un nom d'utilisateur personnalisé créé précédemment. Remplacez PublicKeyPair par la clé publique. Lorsque vous saisissez l'intégralité de la clé publique, commencez par ssh-rsa.
  7. Sélectionnez Enregistrer.
  8. Démarrez votre instance.

Confirmer que la phase cloud-init est terminée

Dans la sortie de la console d'instance, vérifiez les facteurs suivants pour vous assurer que la phase cloud-init est terminée :

  • Aucun message d'erreur n’apparaît.
  • Toutes les directives cloud-init sont répertoriées comme exécutées.
  • Un message Terminé s'affiche pour cloud-init, similaire à l'exemple suivant : « Finished [0;1;39mCloud-init: Final Stage[0m Cloud-init v. A.B.C finished at .. ».

Supprimer les commandes des données utilisateur de l'instance

Procédez comme suit :

  1. Arrêtez votre instance.
  2. Sélectionnez Actions, puis Paramètres de l’instance.
  3. Choisissez Modifier les données utilisateur, puis effacez tout le contenu du champ.
  4. Sélectionnez Enregistrer.
  5. Démarrez votre instance.

Utiliser Systems Manager

Pour récupérer une instance qui est un nœud géré dans Systems Manager, utilisez le dossier d’exploitation AWSSupport-ResetAccess pour récupérer la paire de clés. AWSSupport-ResetAccess utilise EC2Rescue pour générer et ajouter automatiquement une nouvelle paire de clés SSH sur l'instance.

Systems Manager chiffre et enregistre la nouvelle clé privée SSH pour votre instance dans Parameter Store, une fonctionnalité d'AWS Systems Manager sous la forme /ec2rl/openssh/instance_id/key.

Pour obtenir la clé SSH privée depuis Parameter Store, exécutez la commande get-parameters de l'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

Remarque : Veillez à remplacer instance_id par votre ID d’instance et key-pair-name par le nom de votre paire de clés.

Puis, créez un nouveau fichier .pem avec la valeur du paramètre comme contenu. Utilisez le fichier .pem pour vous reconnecter à votre instance inaccessible.

Pour convertir la clé privée en fichier .pem, exécutez la commande suivante :

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

Remarque : Remplacez key-pair-name par le nom de votre paire de clés.

Le dossier d’exploitation d'automatisation crée une Amazon Machine Image (AMI) de sauvegarde activée par mot de passe. Amazon EC2 ne supprime pas automatiquement la nouvelle AMI. Par conséquent, elle demeure dans votre compte AWS.

Pour localiser l'AMI, procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Choisissez AMI.
  3. Saisissez l’ID de l’automatisation dans le champ de recherche.

Utiliser EC2 Instance Connect

Pour vous connecter à une instance Amazon Linux, consultez la section Connexion à une instance Linux à l'aide d'EC2 Instance Connect.

Utiliser l’EC2 Serial Console

Si vous avez activé l’EC2 Serial Console pour Linux, utilisez-la pour résoudre les problèmes liés aux types d’instances basées sur Nitro pris en charge. Pour plus d’informations, consultez la section Configurer l’accès à l’EC2 Serial Console.

Utiliser une instance de secours

Procédez comme suit :

  1. Arrêtez l’instance.

  2. Détachez le volume EBS racine de l'instance.

  3. Lancez une instance de secours dans la même zone de disponibilité que l'instance d'origine.

  4. Attachez le volume racine de l'instance d'origine à l'instance de secours en tant que volume secondaire.

  5. Démarrez l'instance de secours.

  6. Pour obtenir le nom du périphérique de volume racine, exécutez la commande suivante :

    sudo lsblk -f

    Exemple de sortie :

    NAME FSTYPE LABEL UUID MOUNTPOINT
    xvda └─xvda1 xfs 1234abcd-56ef-78gh-90ij-1234klmnopqr /
     xvdf └─xvdf1 xfs abcd1234-ef56-gh78-ij90-qr1234klmnop
  7. Pour monter le volume attaché à l'instance de secours, exécutez les commandes suivantes :

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

    Remarque : Remplacez /dev/xvdf1 par le nom du périphérique de volume racine de l'instance d'origine.

  8. Pour créer une nouvelle clé publique, exécutez la commande suivante :

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

    Remarque : Remplacez USER par le nom d'utilisateur de l'instance d'origine et your_new_public_key par votre clé publique. Le nom de la clé publique commence par ssh-rsa.

  9. Pour configurer l'accès à la clé dans l'instance, exécutez la commande suivante :

    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

    Remarque : Remplacez os-user par le nom d'utilisateur associé à l'AMI que vous avez utilisée pour lancer votre instance.

  10. Pour démonter le volume, exécutez la commande suivante :

sudo umount /mnt/target
  1. Détachez le volume de l'instance de secours, puis rattachez-le à l'instance d'origine.
  2. Démarrez l'instance d'origine.