Frage Wie kann man den öffentlichen Schlüssel von Amazon AWS herunterladen?


Ich habe eine laufende amazon ec2 linux-Instanz, die mit einem Schlüsselpaar (p1) verbunden ist, und ich habe den privaten Schlüssel auf meinen Home-Desktop heruntergeladen. Jetzt 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 hinzugefügt werden authorized_keys meiner AMI-Instanz (auf die ich momentan nur von zu Hause aus zugreifen kann). Allerdings habe ich vergessen, den öffentlichen Schlüssel von p2 mitzubringen, also ist es möglich, diesen öffentlichen Schlüssel irgendwie von Amazon zu exportieren.


24
2017-12-19 16:28


Ursprung




Antworten:


Schönes Puzzle, danke! Hier ist eine Antwort:

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

  2. Stoppen (nicht beenden) Sie die Instanz A, nachdem sie einige Minuten lang ausgeführt wurde, sodass sie den öffentlichen Schlüssel in der Datei authorized_keys speichern kann.

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

  4. Kopieren Sie den öffentlichen Schlüssel aus dem angehängten Dateisystem.

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


6
2017-12-19 19:07



Nicht sicher, wie dies tatsächlich die ursprüngliche Frage löst ... es ist definitiv eine Möglichkeit, mit AWS EC2-Instanzen umzugehen, wenn und nur wenn Sie EBS-unterstützte Instanzen verwenden. - Jeremy Bouse
Sie müssen EBS-Boot-Instanzen nur verwenden, wenn Sie die temporäre Instanz einmal ausführen, um den öffentlichen Schlüssel abzurufen. Alles, was Sie tun wollen, ist, den öffentlichen Schlüssel zu bekommen, den dieser Ansatz tut. - Eric Hammond
Wenn Sie den privaten Schlüssel haben, können Sie den öffentlichen Schlüssel neu generieren, ohne solche Maßnahmen zu ergreifen. - Jeremy Bouse
Jeremy: Basierend auf der ursprünglichen Frage ist der private Schlüssel zurück in seinem Büro, wo er es nicht bekommen kann. Und sobald er wieder im Büro ist, kann er nicht zur EC2-Instanz gelangen, weil er nicht den öffentlichen Schlüssel für diesen privaten Schlüssel hat. Deshalb möchte er den öffentlichen Schlüssel von Amazon bekommen, und die einzige Möglichkeit ist, eine Instanz mit diesem öffentlichen Schlüssel zu starten. Dann müssen Sie den öffentlichen Schlüssel von dieser Instanz abziehen, was der knifflige Teil ist. - Eric Hammond
Beeindruckend! viel Arbeit, um den öffentlichen Schlüssel zu bekommen. Für Amazon wäre es einfacher gewesen, die Option "Öffentlichen Schlüssel exportieren" zu verwenden. - Jus12


Der korrekte ssh-keygen Befehl ist jedoch:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey

35
2018-01-01 19:31



Dies sollte ein Kommentar oder eine vorgeschlagene Bearbeitung der vorherigen Antwort sein. Sie sind jedoch richtig. - JCotton
Sie haben recht, das sollte ein Kommentar sein. Leider habe ich mir noch nicht die Privilegien zum Kommentieren verdient :-( - rsmoorthy
haha, na dann geh du. Danke, dass Sie sich für die Korrektur entschieden haben. - 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
Lauf chmod 400 your_private_key.pem wenn Sie "Berechtigungen sind zu offen Fehler" erhalten - crizCraig


Ich habe bereits eine Antwort gegeben, die EBS-Datenträger verwendet, um den öffentlichen ssh-Schlüssel abzurufen, aber hier gibt es eine andere Möglichkeit, eine temporäre EC2-Instanz mit einem Benutzerdatenskript zu 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.userdata auf Ihrem lokalen Computer. LADE DIESE BEFEHLE NICHT LOKAL!

#!/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 vorhandene 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 weiterhin die Konsolenausgabe von der Instanz an, bis der öffentliche ssh-Schlüssel angezeigt wird. Geben Sie die Instanz-ID an, die vom Befehl run-instances zurückgegeben wird:

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

Innerhalb von 2-10 Minuten werden Sie wie folgt ausgegeben:

========================================================================
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, aber Sie können sie selbst beenden, wenn Sie sicherstellen möchten, dass Ihnen nicht mehr als die zwei Cent in Rechnung gestellt werden, die für die Ausführung kosten.


7
2017-12-20 05:28



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-instances --schlüssel name mykey --instanztyp t1.micro - instance-initiated-shutdown-verhalten terminate --user-datendatei: // output- ssh-key.userdata - Bild-ID ami-c1167eb8; aws ec2 get-console-output - Instanz-ID i-0ce56c0e02086160d; aws ec2 terminate-instances - Instanz-ID i-0ce56c0e02086160d - holmb
(Bearbeitet) Ok Formatierung ist hier schrecklich, ich poste als andere Antwort. - Bernhard


Wenn Sie über den privaten SSH-Schlüssel verfügen, können Sie die öffentliche Schlüsselkomponente einfach neu generieren, indem Sie Folgendes ausführen ssh-keygen Befehl:

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

Das ist der einfache Teil ... Die AWS-Konsole und die API unterstützen nicht das Drücken von 2 Schlüsselpaaren beim Starten einer EC2-Instanz. Dies ist eine Aufgabe, die der Systemadministrator auf andere Weise erledigen muss.

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

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

Dies kopiert den angegebenen öffentlichen Schlüssel auf den Server und in den ~user/.ssh/authorized_keys Datei automatisch für Sie und stellen Sie die richtigen Berechtigungen für die Datei.

Der elegantere Weg wäre, die zusätzlichen Identitätsschlüssel in Ihre Konfigurationsmanagementprozesse einzubeziehen. In meinem Fall bedeutet dies das Hinzufügen der zusätzlichen Schlüssel zum Marionette Konfiguration für den Knoten.

Als eine Randnotiz würde persönliche Präferenz, würde aber eine bessere SSH-Schlüssel-Management-Methode verwenden, als einfach separate Schlüssel für die Arbeit und zu Hause enthalten. Wie ich in a erwähnt habe Vorherige Frage Ich behalte meine Schlüssel auf einem USB-Laufwerk, das ich bei mir behalte, und nicht auf irgendeinem Computer, den ich verwende.


5
2017-12-20 02:20





Eine andere Option wäre, ein kurzes Skript in user_data hinzuzufügen, das einfach einen weiteren ssh-Schlüssel zu root 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 bei der Maschine anmelden ssh -l root -i <KEYFILE> URL und lies einfach den Schlüssel von authorized_keys des Benutzers ec2_user, ubuntu oder wie er auch heißt.

Einzige Sache - Sie müssen die Maschine öffentlich zugänglich machen und sicherstellen, dass der Zugang zu Port 22 von außen möglich ist.


0
2018-05-29 14:02