Direkt zum Inhalt

Wie stelle ich eine Verbindung zu meiner Amazon EC2-Instance her, wenn ich mein SSH-Schlüsselpaar nach dem ersten Instance-Start verliere?

Lesedauer: 6 Minute
0

Ich möchte eine Verbindung zu meiner Amazon Elastic Compute Cloud (Amazon EC2)-Instance herstellen, aber ich habe das SSH-Schlüsselpaar verloren.

Kurzbeschreibung

Verwende eine der folgenden Methoden, um eine Verbindung zu einer EC2-Instance herzustellen, wenn du das SSH-Schlüsselpaar verlierst:

  • Gib die Benutzerdaten ein, um ein neues Schlüsselpaar zu erstellen.
  • Verwende für Instances, bei denen es sich um verwaltete Knoten handelt, AWS Systems Manager, um das Schlüsselpaar wiederherzustellen.
  • Verwende EC2 Instance Connect für Instances, auf denen Amazon Linux 2 (AL2) Version 2.0.20190618 und höher oder Amazon Linux 2023 (AL2023) ausgeführt wird.
  • Wenn du die Instance erreichen kannst und Zugriff auf die serielle EC2-Konsole hast, verwende die serielle Konsole.
    Hinweis: Bei dieser Methode musst du die Instance nicht anhalten und starten.
  • Erstelle eine Rettungs-Instance, um einen neuen öffentlichen Schlüssel zu erstellen.

Wichtig: Bevor du die Instance anhältst und startest, gehe wie folgt vor:

Hinweis: Wenn du eine Instance anhältst und startest, ändert sich die öffentliche IP-Adresse der Instance. Es empfiehlt sich, beim Weiterleiten von externem Datenverkehr an die Instance eine Elastic-IP-Adresse anstelle einer öffentlichen IP-Adresse zu verwenden.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Benutzerdatenskript eingeben

Wichtig: Speichere keine sensiblen Daten in Benutzerdatenskripten. Verwende stattdessen sichere Methoden wie AWS Secrets Manager.

Wenn die Instance keinen Zugriff auf cloud-init hat oder cloud-init-Probleme auftreten, fahre mit Use a rescue instance (Eine Rettungs-Instance verwenden) fort.

Erstellen des neuen Schlüsselpaars

Führe die folgenden Schritte aus:

  1. Erstelle ein neues Schlüsselpaar.
  2. Wenn du den privaten Schlüssel in der Amazon-EC2-Konsole erstellst, rufe den öffentlichen Schlüssel für das Schlüsselpaar ab.
  3. Öffne die Amazon-EC2-Konsole.
  4. Halte deine Instance an.
  5. Wähle Aktionen und dann Instance-Einstellungen.
  6. Wähle Benutzerdaten bearbeiten und gib dann das folgende Skript ein:
    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
    Hinweis: Ersetze username durch den Standardbenutzernamen oder einen zuvor erstellten benutzerdefinierten Benutzernamen. Ersetze PublicKeypair durch den öffentlichen Schlüssel. Wenn du den gesamten öffentlichen Schlüssel eingibst, beginne mit ssh-rsa.
  7. Wähle Speichern.
  8. Starte deine Instance.

Sich vergewissern, dass die cloud-init-Phase abgeschlossen ist

Überprüfe in der Ausgabe der Instance-Konsole die folgenden Faktoren, um sicherzustellen, dass die cloud-init-Phase abgeschlossen ist:

  • Es gibt keine Fehlermeldungen.
  • Alle cloud-init-Anweisungen werden als Executed (Ausgeführt) aufgeführt.
  • Du siehst die Meldung Finished (Abgeschlossen) für cloud-init, die dem folgenden Beispiel ähnelt: „Finished [0;1;39mCloud-init: Final Stage[0m Cloud-init v. A.B.C finished at ...“

Die Befehle aus den Benutzerdaten der Instance entfernen

Führe die folgenden Schritte aus:

  1. Halte deine Instance an.
  2. Wähle Aktionen und dann Instance-Einstellungen.
  3. Wähle Benutzerdaten bearbeiten und lösche dann den gesamten Inhalt aus dem Feld.
  4. Wähle Speichern.
  5. Starte deine Instance.

AWS Systems Manager verwenden

Um eine Instance wiederherzustellen, die ein verwalteter Knoten in Systems Manager ist, verwende das AWSSupport-ResetAccess-Runbook, um das Schlüsselpaar wiederherzustellen. AWSSupport-ResetAccess verwendet EC2Rescue, um automatisch ein neues SSH-Schlüsselpaar zu generieren und auf der Instance hinzuzufügen.

Systems Manager verschlüsselt und speichert den neuen privaten SSH-Schlüssel für die Instance im Parameter Store, einer Funktion von AWS Systems Manager, als /ec2rl/openssh/instance_id/key.

Führe den AWS-CLI-Befehl get-parameters aus, um den privaten SSH-Schlüssel aus dem Parameter Store abzurufen:

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

Hinweis: Ersetze instance_id durch die Instance-ID und key-pair-name durch den Namen des Schlüsselpaars.

Erstelle dann eine neue PEM-Datei mit dem Wert des Parameters als Inhalt. Verwende die PEM-Datei, um erneut eine Verbindung zu der nicht erreichbaren Instance herzustellen.

Um den privaten Schlüssel in eine „.pem“-Datei zu konvertieren, führe den folgenden Befehl aus:

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

Hinweis: Ersetze key-pair-name durch den Namen des Schlüsselpaars.

Das Automatisierungs-Runbook erstellt ein kennwortgeschütztes Amazon Machine Image (AMI)-Backup. Amazon EC2 löscht das neue AMI nicht automatisch, es verbleibt also in deinem AWS-Konto.

Gehe wie folgt vor, um das AMI zu finden:

  1. Öffne die Amazon-EC2-Konsole.
  2. Wähle ** AMIs**.
  3. Gib die ID der Automatisierung in das Suchfeld ein.

EC2 Instance Connect verwenden

Informationen zum Herstellen einer Verbindung mit einer Amazon-Linux-Instance findest du unter Herstellen einer Verbindung zu einer Linux-Instance mithilfe von EC2 Instance Connect.

Verwendung der seriellen EC2-Konsole

Wenn du auf die serielle EC2-Konsole für Linux zugreifen kannst, verwende die Konsole zur Fehlerbehebung bei unterstützten Nitro-basierten Instance-Typen. Weitere Informationen findest du unter Zugriff auf die serielle EC2-Konsole konfigurieren.

Verwende eine Rettungs-Instance

Führe die folgenden Schritte aus:

  1. Halte die Instance an.

  2. Trenne das EBS-Root-Volume von der Instance.

  3. Starte eine Rettungs-Instance in derselben Availability Zone wie die ursprüngliche Instance.

  4. Füge das Root-Volume der ursprünglichen Instance als sekundäres Volume an die Rettungs-Instance an.

  5. Starte die Rettungs-Instance.

  6. Führe den folgenden Befehl aus, um den Gerätenamen des Root-Volumes abzurufen:

    sudo lsblk -f

    Beispielausgabe:

    NAME FSTYPE LABEL UUID MOUNTPOINT
    xvda └─xvda1 xfs 1234abcd-56ef-78gh-90ij-1234klmnopqr /
     xvdf └─xvdf1 xfs abcd1234-ef56-gh78-ij90-qr1234klmnop
  7. Führe die folgenden Befehle aus, um das angefügte Volume an die Rettungs-Instance einzubinden:

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

    Hinweis: Ersetze /dev/xvdf1 durch den Gerätenamen des Root-Volumes der ursprünglichen Instance.

  8. Führe den folgenden Befehl aus, um einen neuen öffentlichen Schlüssel zu erstellen:

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

    Hinweis: Ersetze USER durch den Benutzernamen der ursprünglichen Instance und your_new_public_key durch deinen öffentlichen Schlüssel. Der Name des öffentlichen Schlüssels beginnt mit ssh-rsa.

  9. Führe den folgenden Befehl aus, um den Zugriff auf den Schlüssel in der Instance zu konfigurieren:

    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

    Hinweis: Ersetze os-user durch den Benutzernamen, der dem AMI zugeordnet ist, mit dem du die Instance gestartet hast.

  10. Führe den folgenden Befehl aus, um die Einbindung des Volumes aufzuheben:

sudo umount /mnt/target
  1. Trenne das Volume von der Rettungs-Instance und füge es erneut an die ursprüngliche Instance an.
  2. Starte die ursprüngliche Instance.