web-dev-qa-db-fra.com

Empreinte digitale de la clé ssh PEM

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

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

Comment puis-je obtenir l'empreinte digitale de la clé (que je vois dans ssh-agent) directement à partir du fichier? Je connais 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 is not a public key file.

Cette clé commence par:

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

par opposition à une clé privée "régulière", qui ressemble à:

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

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

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

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

$ ssh-keygen -lf path/to/store/public_key_file
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@Host (RSA)

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

$ ssh-keygen -E md5 -lf path/to/store/public_key_file
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)
38
ominug

AWS " Vérification de l'empreinte digitale de votre paire de clés " fournit deux lignes simples qui résolvent le problème, selon la façon dont votre clé a été créée.

Si vous avez créé votre paire de clés à l'aide d'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 digitales caviardées dans la sortie ci-dessus)

52
Mike D

Voici une ligne 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 la chaîne bash here <<< afin d'avoir stdin disponible en tant que fichier normal (/dev/stdin) plutôt qu'un tuyau comme ssh-keygen ne fonctionnera que sur un fichier.

Depuis version 7.2 de opensshssh-keygen prend en charge les empreintes digitales à partir de l'entrée standard:

  • ssh-keygen (1): autorise les empreintes digitales à partir d'une entrée standard, par ex. "ssh-keygen -lf -"

Notez que cette commande rompra avec les clés privées qui utilisent une phrase secrète et n'utilisent pas d'agent. Il devrait fonctionner avec des fichiers pem générés par AWS ou OpenStack qui n'utilisent pas de mots de passe.

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

6
htaccess

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

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

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

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

Plus généralement parlant

Pensez-y: la raison de l'existence de l'empreinte digitale est que vous pouvez identifier la clé publique. En fait, obtenir un hachage 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 une retenue sur la moitié privée correspondante. Comme vous savez déjà quelles clés vous essayez de vérifier, vous n'avez pas besoin de l'empreinte digitale.

2
Stephane