Wie lade ich einen öffentlichen Schlüssel von Amazon AWS herunter?

25

Ich habe eine Amazon Ec2 Linux-Instanz mit einem Schlüsselpaar (p1) und habe den privaten Schlüssel auf meinen Desktop heruntergeladen. Bei der Arbeit habe ich ein Schlüsselpaar (p2) auf meinem Arbeitsdesktop erstellt und den öffentlichen Schlüssel über die AWS-Konsole in Amazon importiert.

Zu Hause möchte ich den öffentlichen Schlüssel von Schlüsselpaar p2 hinzufügen, authorized_keysder meiner AMI-Instanz hinzugefügt werden soll (auf die ich derzeit nur von zu Hause aus zugreifen kann). Da ich jedoch vergessen habe, den öffentlichen Schlüssel von p2 mitzubringen, ist es irgendwie möglich, diesen öffentlichen Schlüssel von Amazon zu exportieren.

Jus12
quelle

Antworten:

6

Nettes Puzzle, danke! Hier ist eine Antwort:

  1. Starten Sie eine neue, temporäre EBS-Start-Instanz t1.micro A unter Angabe von Schlüsselpaar p2. Geben Sie eine Verfügbarkeitszone an, in der bereits eine andere Instanz B ausgeführt wird und auf die Sie Zugriff haben. (Beginnen Sie bei Bedarf eine temporäre).

  2. Stoppen (nicht beenden) Sie die Instanz A, nachdem sie einige Minuten lang im aktiven Zustand war, damit Sie den öffentlichen Schlüssel in der Datei authorized_keys speichern können.

  3. Trennen Sie das Root-EBS-Volume von der gestoppten Instanz A. Hängen Sie es an Ihre laufende Instanz B an, und hängen Sie es an.

  4. Kopieren Sie den öffentlichen Schlüssel aus dem bereitgestellten Dateisystem.

  5. Trennen und löschen Sie das EBS-Volume. Beenden Sie die temporäre Instanz A.

Eric Hammond
quelle
1
Ich bin nicht sicher, wie dies die ursprüngliche Frage tatsächlich löst. Es ist definitiv eine Möglichkeit, mit AWS EC2-Instanzen umzugehen, wenn Sie EBS-gestützte Instanzen verwenden.
Jeremy Bouse
Sie müssen keine EBS-Startinstanzen verwenden, es sei denn, Sie führen die temporäre Instanz einmal aus, um den öffentlichen Schlüssel zu entfernen. Alles, was Sie tun möchten, ist, den öffentlichen Schlüssel zu erhalten, den dieser Ansatz ausführt.
Eric Hammond
1
Wenn Sie über den privaten Schlüssel verfügen, können Sie den öffentlichen Schlüssel neu generieren, ohne solche Maßnahmen durchführen zu müssen.
Jeremy Bouse
2
Jeremy: Aufgrund der ursprünglichen Frage ist der private Schlüssel wieder in seinem Büro, wo er ihn nicht bekommen kann. Und sobald er wieder im Büro ist, kann er die EC2-Instanz nicht mehr aufrufen, da sie nicht über den öffentlichen Schlüssel für diesen privaten Büroschlüssel verfügt. Aus diesem Grund möchte er den öffentlichen Schlüssel von Amazon erhalten, und der einzige Weg, dies zu tun, besteht darin, eine Instanz mit diesem öffentlichen Schlüssel zu starten. Dann müssen Sie den öffentlichen Schlüssel von dieser Instanz entfernen, was der heikle Teil ist.
Eric Hammond
1
Wow! viel Arbeit, um den öffentlichen Schlüssel zu bekommen. Es wäre für Amazon einfacher gewesen, die Option "Öffentlichen Schlüssel exportieren" zu verwenden.
12.
37

Der korrekte Befehl ssh-keygen lautet jedoch:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey
rsmoorthy
quelle
Dies sollte ein Kommentar oder eine vorgeschlagene Änderung der vorherigen Antwort sein. Sie sind zwar korrekt.
JCotton,
Sie haben Recht, das hätte ein Kommentar sein sollen. Leider habe ich mir noch nicht die Privilegien verdient, zu kommentieren :-(
rsmoorthy
haha na los gehts Vielen Dank für die Korrektur.
JCotton,
Diese Antwort würde funktionieren, wenn er Zugriff auf den privaten Schlüssel hätte, aber in der ursprünglichen Frage ist dieser private Schlüssel an einem anderen Ort und nicht zugänglich.
Eric Hammond
1
laufen, chmod 400 your_private_key.pemwenn Sie bekommen "Berechtigungen sind zu offen Fehler"
crizCraig
7

Ich habe bereits eine Antwort angegeben, die EBS-Volumes verwendet, um an den öffentlichen Schlüssel ssh zu gelangen. Auf andere Weise können Sie jedoch eine temporäre EC2-Instanz mit einem Benutzerdatenskript starten, das den öffentlichen Schlüssel an die Konsolenausgabe sendet. Hier sind die Schritte:

Speichern Sie den folgenden Code in einer Datei mit dem Namen output-ssh-key.userdataauf Ihrem lokalen Computer. LAUFEN SIE DIESE BEFEHLE NICHT LOKAL AUS!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

Führen Sie eine Ubuntu 10.04 LTS-Instanz mit der obigen Datei als Benutzerdatenskript aus. Geben Sie das Schlüsselpaar an, für das Sie den öffentlichen SSH-Schlüssel abrufen möchten:

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

Fordern Sie so lange die Konsolenausgabe von der Instanz an, bis Ihr öffentlicher SSH-Schlüssel angezeigt wird. Geben Sie die vom Befehl run-instance zurückgegebene Instanz-ID an:

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

Innerhalb von 2-10 Minuten erhalten Sie folgende Ausgabe:

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

Die temporäre Instanz wird automatisch in weniger als einer Stunde beendet. Sie können sie jedoch selbst beenden, wenn Sie sicherstellen möchten, dass Ihnen nicht mehr als die zwei Cent in Rechnung gestellt werden, die die Ausführung kosten wird.

Eric Hammond
quelle
Ich habe dies mit einer modernen Installation von awscli versucht und es hat mit Ihrem Benutzerdatenskript funktioniert. Allerdings musste ich die Befehle etwas anpassen. Dies funktionierte für die Region eu-west-1: aws ec2 run-instance - Tastenname mykey - Instanztyp t1.micro - Instanzinitiiertes Abschaltverhalten terminate - Benutzerdatendatei: // output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get-console-output - Instanz-ID i-0ce56c0e02086160d; aws ec2 terminate-instance --instanz-id i-0ce56c0e02086160d
holmb
(Bearbeitet) Ok Formatierung ist hier schrecklich, ich werde als andere Antwort posten.
Bernhard
5

Wenn Sie den privaten SSH-Schlüssel haben, können Sie die Komponente des öffentlichen Schlüssels einfach durch Ausführen des folgenden Befehls ssh-keygen neu generieren :

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

So viel ist der einfache Teil ... Die AWS-Konsole und -API unterstützen das Drücken von 2 Schlüsselpaaren beim Starten einer EC2-Instanz nicht. Dies ist eine Übung, die der Systemadministrator auf andere Weise ausführen kann.

Wenn Sie Zugriff auf den bereits autorisierten Identitätsschlüssel haben, können Sie einfach den folgenden Befehl ssh-copy-id ausführen :

 ssh-copy-id -i /path/to/public-key user@EC2-instance

Dadurch wird der angegebene öffentliche Schlüssel ~user/.ssh/authorized_keysautomatisch auf den Server und in die Datei kopiert , und es werden die richtigen Berechtigungen für die Datei sichergestellt.

Der elegantere Weg wäre, die zusätzlichen Identitätsschlüssel in Ihre Konfigurationsverwaltungsprozesse einzubeziehen. In meinem Fall müssen die zusätzlichen Schlüssel zur Puppet- Konfiguration für den Knoten hinzugefügt werden.

Als Randbemerkung, persönliche Präferenz würde aber eine bessere SSH-Schlüsselverwaltungsmethode verwenden, als einfach getrennte Schlüssel für den Arbeits- und Heimstandort einschließen zu müssen. Wie ich in einer vorherigen Frage erwähnt habe, verwalte ich meine Schlüssel auf einem USB-Laufwerk, das ich bei mir habe, und nicht auf einem Computer, den ich benutze.

Jeremy Bouse
quelle
0

Eine andere Möglichkeit wäre, ein kurzes Skript in user_data einzufügen, das dem root einfach einen weiteren ssh-Schlüssel hinzufügt:

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

Dann können Sie sich als root mit auf der Maschine anmelden ssh -l root -i <KEYFILE> URLund einfach den Schlüssel von authorized_keys des Benutzers ec2_user, ubuntu oder wie auch immer er heißt, auslesen.

Das einzige - Sie müssen die Maschine öffentlich zugänglich machen und sicherstellen, dass der Zugriff auf Port 22 von außen möglich ist.

Bernhard
quelle