Das Windows-Kennwort wird auf AWS EC2 auch mit dem richtigen privaten Schlüssel nicht entschlüsselt

21

Ich habe unter AWS EC2 eine neue Windows-Instanz mit einem Schlüsselpaar erstellt, das ich durch Hochladen meines öffentlichen Schlüssels von meinem lokalen Computer erstellt habe.

Die Instanz wurde ordnungsgemäß gestartet, das Kennwort wird jedoch nicht entschlüsselt. Es berichtet:

Privater Schlüssel muss mit "----- BEGIN RSA PRIVATE KEY -----" beginnen und mit "----- END RSA PRIVATE KEY -----" enden

Ich bin sicher, dass ich den richtigen Schlüssel hochgeladen habe. Ich habe überprüft, ob die Fingerabdrücke mit dem von AWS verwendeten seltsamen Fingerabdruckformat übereinstimmen . Aber es wird einfach nicht entschlüsselt.

Ich habe versucht, die Schlüsseldatei hochzuladen und in das Formular einzufügen.

Irgendwann habe ich herausgefunden, dass die nachgestellte Zeile nicht entfernt wird, und die leere Zeile im Schlüssel gelöscht. Das bringt mich nur zu einem neuen Fehler, wenn ich auf "Passwort entschlüsseln" klicke:

Beim Entschlüsseln Ihres Passworts ist ein Fehler aufgetreten.  Bitte stellen Sie sicher, dass Sie Ihren privaten Schlüssel korrekt eingegeben haben.

Craig Ringer
quelle

Antworten:

22

Die Schlüsselverwaltung von AWS EC2 funktioniert nicht mit privaten SSH-Schlüsseln, für die Kennwörter festgelegt (verschlüsselt) sind. Es erkennt dies nicht und schlägt einfach mit einem nicht informativen Fehler fehl.

Wenn Ihr privater Schlüssel verschlüsselt auf der Festplatte gespeichert ist (wie es IMO sein sollte), müssen Sie ihn entschlüsseln, um ihn in die AWS-Konsole einzufügen.

Ziehen Sie stattdessen in Betracht, das Kennwort lokal zu entschlüsseln, damit Sie Ihren privaten Schlüssel nicht an AWS senden müssen. Rufen Sie die verschlüsselten Kennwortdaten (base64-codiert) nach dem Start aus dem Serverprotokoll ab oder verwenden Sie get-password-data oder die entsprechenden API-Anforderungen.

Sie können das Ergebnis dann mit base64 dekodieren und entschlüsseln:

base64 -d /tmp/file | openssl rsautl -decrypt -inkey /path/to/aws/private/key.pem

(Private OpenSSH-Schlüssel werden von akzeptiert. openssl rsautl)

Das Problem, dass kennwortgeschützte Schlüssel nicht mit einem nützlichen Fehler behandelt werden, wirkt sich auch auf den ec2-get-passwordBefehl aus .

Siehe auch:

Craig Ringer
quelle
1
Vielen Dank. Hier ist eine vollständige Befehlszeile, die ich gemäß Ihren Vorschlägen verwende: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} (verwendet aws-cli und jq ).
Ben Butler-Cole
base64 beschwert sich -dja -Dbei mir funktioniert.
Saad Masood
2
In OS X würde ich dieser Pipe einen weiteren Befehl hinzufügen: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} | pbcopy ... der das Passwort direkt in Ihre Zwischenablage sendet.
Mark Maglana
1
Dies sollte meiner Meinung nach als die richtige Antwort markiert werden. Da die anderen Antworten im Vergleich zu diesen etwas unsicher sind
webofmars
4

Ohne die Verwendung von jq ist dies weiterhin möglich, erfordert jedoch ein zusätzliches Parsen der zurückgegebenen Daten.

aws ec2 get-password-data "--instance-id=${instance_id}" --query 'PasswordData' | sed 's/\"\\r\\n//' | sed 's/\\r\\n\"//' | base64 -D | openssl rsautl -inkey ${my_key} -decrypt
Ben
quelle
Hat super funktioniert, auf WSL Ubuntu musste ich base64 -deher als verwenden -D.
Seth Stone
3

Das hat bei mir unter macOS funktioniert:

openssl rsa -in $HOME/.ssh/aws-remote -out /Users/home/desktop/unencrypted-rsa.txt

Beachten Sie, dass Sie anhand der folgenden Zeile feststellen können, ob Ihre PEM-Datei mit einem Kennwort verschlüsselt ist. Wenn es vorhanden ist, müssen Sie es entschlüsseln, bevor Sie es mit Amazon verwenden können:

Proc-Type: 4,ENCRYPTED
Django Reinhardt
quelle
Für mich war es die Lösung. Die AWS-Benutzeroberfläche erkennt nicht, dass der Schlüssel durch eine Passphrase geschützt war, und Sie müssen ihn vorher entschlüsseln. Das ist allerdings etwas unsicher. Entfernen Sie anschließend die entschlüsselte Datei.
Webofmars
2

Auf meinem Mac unterscheiden sich die Befehlszeilenargumente für base64.

Das hat bei mir funktioniert:

base64 -D -i /tmp/file | openssl rsautl -decrypt -inkey /path/to/key.pem
Dan
quelle
-1
  1. Gehe zum ec2 Dashboard
  2. Löschen Sie den vorhandenen Schlüssel
  3. Erstellen Sie ein neues Schlüsselpaar
  4. wähle einen Namen
  5. Laden Sie es herunter und bewahren Sie es lokal auf
  6. starte die Instanz und lade deine Kopie der Windows-Instanz herunter
  7. Benennen Sie das neue Schlüsselpaar mit dem in Schritt 4 verwendeten Namen
  8. Verwenden Sie diesen neu generierten Schlüssel, um das Kennwort zu entschlüsseln

das wird funktionieren

Arun Mohan
quelle
1
Ja, es wird klappen. Aber es geht auch irgendwie daneben - ich erkläre den Fall, in dem Sie einen lokalen Schlüssel hochladen.
Craig Ringer