Frage Fingerabdruck von PEM-ssh-Schlüssel


Ich habe eine PEM-Datei, die ich einem laufenden ssh-agent hinzufüge:

$ file query.pem
query.pem: PEM RSA private key

$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)

$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)

Wie bekomme ich den Fingerabdruck des Schlüssels (den ich in ssh-agent sehe) direkt aus der Datei? Ich kenne ssh-keygen -l -f some_key funktioniert für "normale" SSH-Schlüssel, aber nicht für PEM-Dateien.

Wenn ich ssh-keygen in der .pem-Datei versuche, bekomme ich:

$ ssh-keygen -l -f ./query.pem                                             
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.

Dieser Schlüssel beginnt mit:

-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.

im Gegensatz zu einem "normalen" privaten Schlüssel, der wie folgt aussieht:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.

25
2017-10-28 07:48


Ursprung


Warum würden Sie denken, dass es für PEM-Dateien nicht funktioniert? Welchen Fehler bekommst du, wenn du es versuchst? EIN .ssh/id_rsa Datei, die von OpenSSH unter Verwendung aller Standardwerte generiert wird, ist eine PEM-Datei. Die privaten Schlüssel sind standardmäßig PEM-codiert. Tatsächlich können Sie RSA-Schlüssel, die Sie mit OpenSSL generieren, direkt mit OpenSSH verwenden. - Zoredache
aktualisierte Beschreibung mit Ausgabe von ssh-keygen auf der .pem - Unknown


Antworten:


Wenn Sie den Fingerabdruck Ihrer verlorenen öffentlichen Schlüsseldatei abrufen möchten, können Sie das tun Wiederherstellen Sie es aus der privaten Schlüsseldatei:

$ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file

Dann können Sie den öffentlichen Fingerabdruck ermitteln:

$ ssh-keygen -lf path/to/store/public_key_file

31
2017-07-10 18:36



@ MikeDs Antwort ist eigentlich die "richtige" Antwort für das, wonach der OP gesucht hat (und wonach ich gesucht habe). AWS stellt den Fingerabdruck in dem von ihm gezeigten Format zur Verfügung, wobei die Ziffernpaare durch Doppelpunkte getrennt sind. Seine Lösung (von der bereitgestellten AWS-Seite) generiert den Fingerabdruck auf dieselbe Weise, so dass Sie ihn korrekt überprüfen können. - Mike Williamson


AWS "Überprüfen des Fingerabdrucks Ihres Schlüsselpaars"bietet zwei Einzeiler, die das Problem lösen, je nachdem, wie Ihr Schlüssel erstellt wurde.

Wenn Sie Ihr Schlüsselpaar mit AWS erstellt haben:

$ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

Oder wenn Sie Ihr Schlüsselpaar mit einem Drittanbieter-Tool erstellt haben:

$ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c
writing RSA key
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

(Fingerabdrücke in der obigen Ausgabe)


38
2018-06-09 13:09





Hier ist ein Liner, der tun sollte, was Sie wollen, ohne dass Sie eine öffentliche Schlüsseldatei lokal erstellen müssen.

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

Dies verwendet die Bash-Zeichenfolge <<< um stdin als reguläre Datei verfügbar zu haben (/dev/stdin) anstatt einer Pfeife als ssh-keygen wird nur mit einer Datei arbeiten.

Ab Release 7.2 von openssh  ssh-keygen unterstützt Fingerabdruck von der Standardeingabe:

  • ssh-keygen (1): Erlaube Fingerabdruck von der Standardeingabe, z. "ssh-keygen -lf -"

Beachten Sie, dass dieser Befehl mit privaten Schlüsseln bricht, die eine Passphrase verwenden und keinen Agenten verwenden. Es sollte mit Pem-Dateien funktionieren, die von AWS oder OpenStack generiert wurden und keine Passphrases verwenden.

Sehen https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin Für mehr Information.


6
2018-04-27 03:13





Sie erhalten den Fingerabdruck nicht aus der privaten Schlüsseldatei, sondern aus der öffentlichen Schlüsseldatei.

In der Tat hat ssh-keygen dir das schon gesagt:

./query.pem ist keine öffentliche Schlüsseldatei.

Führen Sie es gegen die öffentliche Hälfte des Schlüssels und es sollte funktionieren.

Allgemein gesprochen

Denken Sie darüber nach: Der Grund für den Fingerabdruck besteht darin, dass Sie den öffentlichen Schlüssel identifizieren können. Tatsächlich ist das Erhalten eines Hashs des privaten Schlüssels ein potentielles Sicherheitsproblem, abgesehen davon, dass es für den Server nutzlos ist (der nicht einmal den privaten Schlüssel in Frage hat).

Sobald Sie den öffentlichen Schlüssel haben, überprüft der Prozess, ob der Client die entsprechende private Hälfte hält. Da Sie bereits wissen, welche Schlüssel Sie verifizieren möchten, benötigen Sie den Fingerabdruck nicht.


2
2017-10-28 08:06



Das Problem ist, dass ich keinen öffentlichen Schlüssel für diesen privaten habe :( Und noch etwas, ssh-keygen arbeitet an einer privaten RSA-Schlüsseldatei, die die zusätzlichen Informationen am Anfang hat (siehe meine ursprüngliche Post), aber nicht auf dieser. - Unknown
Dann kannst du nichts dagegen tun. Sie können die öffentliche Hälfte des Schlüssels nicht mehr aus dem privaten Teil holen, als Sie das Gegenteil tun können. - Stephane
Das ist falsch. Wie @ominug oben hingewiesen hat, ssh-keygen -yf macht dies. - Steve Bennett
@Stephane Während korrekt auf einer reinen RSA-Ebene, in der Praxis der Art und Weise Schlüssel in dem PKCS gespeichert sind spec das Format für private Schlüssel enthält tatsächlich beiden Tasten. Vergleichen Sie die Spezifikationen für Privatgelände vs Öffentlichkeit - Håkan Lindqvist
"Sie können die öffentliche Hälfte des Schlüssels nicht vom privaten Teil bekommen ..." - oh ja, Sie können wahrscheinlich. Nehmen Sie das Modul aus dem privaten Schlüssel, und verwenden Sie 65537 als öffentliche Exponenten, und die Chancen sind, haben Sie den öffentlichen Schlüssel gefunden. - Jim Flood