43 votes

Empreinte de clé PEM SSH

J'ai un fichier PEM que j'ajoute à un ssh-agent en cours d'exécution :

$ file query.pem
query.pem : clé privée RSA PEM

$ ssh-add ./query.pem
Identity ajoutée : ./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)

Comment puis-je obtenir l'empreinte de clé (que je vois dans ssh-agent) directement à partir du fichier ? Je sais que ssh-keygen -l -f some_key fonctionne pour les clés ssh "normales", mais pas pour les fichiers PEM.

Si j'essaie ssh-keygen sur le fichier .pem, j'obtiens :

$ ssh-keygen -l -f ./query.pem                                             
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem n'est pas un fichier de clé publique.

Cette clé commence par :

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

à la différence d'une clé privée "normale", qui ressemble à :

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

63voto

Mike D Points 797

La "Vérification de l'empreinte de votre paire de clés" d'AWS propose deux commandes d'une ligne chacune qui résolvent le problème, en fonction de la manière dont votre clé a été créée.

Si vous avez créé votre paire de clés en utilisant AWS :

$ 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

Ou, si vous avez créé votre paire de clés avec un outil tiers :

$ 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

(empreintes masquées dans la sortie ci-dessus)

48voto

dardisco Points 171

Si vous souhaitez récupérer l'empreinte digitale de votre fichier de clé publique perdu, vous pouvez la récupérer à partir du fichier de clé privée:

$ ssh-keygen -yf chemin/vers/fichier_de_clé_privée > chemin/vers/stocker/fichier_de_clé_publique

Ensuite, vous pouvez vérifier l'empreinte digitale publique:

$ ssh-keygen -lf chemin/vers/stocker/fichier_de_clé_publique
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@host (RSA)

Sur certains systèmes plus récents, cela imprime l'empreinte digitale SHA256 de la clé. Vous pouvez imprimer l'empreinte digitale MD5 de la clé (sous forme de colonne) en utilisant l'option -E:

$ ssh-keygen -E md5 -lf chemin/vers/stocker/fichier_de_clé_publique
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

Ou en une seule ligne de commande:

$ ssh-keygen -yf /etc/ssh/ssh_host_ecdsa_key | ssh-keygen -E md5 -lf -
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

7voto

htaccess Points 366

Voici une ligne de code qui devrait faire ce que vous voulez sans nécessiter la création d'un fichier de clé publique localement.

$ 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)

Ceci utilise le bash here string <<< pour avoir stdin disponible comme un fichier normal (/dev/stdin) au lieu d'un tube, car ssh-keygen fonctionnera uniquement sur un fichier.

À partir de la version 7.2 d'openssh, ssh-keygen prend en charge la création d'empreintes à partir de l'entrée standard :

  • ssh-keygen(1) : permet la création d'empreintes à partir de l'entrée standard, par exemple "ssh-keygen -lf -"

Remarque : cette commande ne fonctionnera pas avec des clés privées protégées par un mot de passe et qui ne sont pas utilisées avec un agent. Cela devrait fonctionner avec les fichiers pem générés par AWS ou OpenStack qui ne sont pas protégés par un mot de passe.

Voir https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin pour plus d'informations.

2voto

Stephane Points 6344

Vous n'obtenez pas l'empreinte digitale à partir du fichier de clé privée mais à partir du fichier de clé publique.

En fait, ssh-keygen vous l'a déjà indiqué :

./query.pem n'est pas un fichier de clé publique.

Exécutez-le avec la moitié publique de la clé et cela devrait fonctionner.

De manière plus générale

Pensez-y: la raison pour laquelle l'empreinte digitale existe est que vous pouvez identifier la clé publique. En réalité, obtenir un hash de la clé privée est un problème de sécurité potentiel en plus d'être inutile pour le serveur (qui n'a même PAS la clé privée en question).

Une fois que vous avez la clé publique, le processus consiste à vérifier que le client a la moitié privée correspondante. Puisque vous savez déjà quelles clés vous essayez de vérifier, vous n'avez pas besoin de l'empreinte digitale.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X