Wie stelle ich eine Verbindung zu meiner Amazon EC2-Instance her, wenn ich mein SSH-Schlüsselpaar nach dem ersten Instance-Start verliere?
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:
- Erstelle ein Backup des Amazon Elastic Block Store (Amazon EBS)-Volumes.
Hinweis: Wenn die Instance vom Instance-Speicher unterstützt wird oder über Instance-Speicher-Volumes verfügt, die Daten enthalten, löscht Amazon EC2 die Daten, wenn du die Instance anhältst. - Stelle das Verhalten beim Herunterfahren der Instance auf Stopp ein, um sicherzustellen, dass die Instances nicht beendet werden, wenn du sie anhältst.
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:
- Erstelle ein neues Schlüsselpaar.
- Wenn du den privaten Schlüssel in der Amazon-EC2-Konsole erstellst, rufe den öffentlichen Schlüssel für das Schlüsselpaar ab.
- Öffne die Amazon-EC2-Konsole.
- Halte deine Instance an.
- Wähle Aktionen und dann Instance-Einstellungen.
- Wähle Benutzerdaten bearbeiten und gib dann das folgende Skript ein:
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.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 - Wähle Speichern.
- 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:
- Halte deine Instance an.
- Wähle Aktionen und dann Instance-Einstellungen.
- Wähle Benutzerdaten bearbeiten und lösche dann den gesamten Inhalt aus dem Feld.
- Wähle Speichern.
- 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:
- Öffne die Amazon-EC2-Konsole.
- Wähle ** AMIs**.
- 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:
-
Starte eine Rettungs-Instance in derselben Availability Zone wie die ursprüngliche Instance.
-
Füge das Root-Volume der ursprünglichen Instance als sekundäres Volume an die Rettungs-Instance an.
-
Führe den folgenden Befehl aus, um den Gerätenamen des Root-Volumes abzurufen:
sudo lsblk -fBeispielausgabe:
NAME FSTYPE LABEL UUID MOUNTPOINT xvda └─xvda1 xfs 1234abcd-56ef-78gh-90ij-1234klmnopqr / xvdf └─xvdf1 xfs abcd1234-ef56-gh78-ij90-qr1234klmnop -
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/targetHinweis: Ersetze /dev/xvdf1 durch den Gerätenamen des Root-Volumes der ursprünglichen Instance.
-
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_keysHinweis: 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.
-
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_keysHinweis: Ersetze os-user durch den Benutzernamen, der dem AMI zugeordnet ist, mit dem du die Instance gestartet hast.
-
Führe den folgenden Befehl aus, um die Einbindung des Volumes aufzuheben:
sudo umount /mnt/target
- Sprache
- Deutsch
