Calculer l'empreinte digitale de la clé RSA

903

Je dois faire l'audit de clé SSH pour GitHub, mais je ne sais pas comment trouver mon empreinte digitale de clé RSA. J'ai initialement suivi un guide pour générer une clé SSH sous Linux.

Quelle est la commande que je dois entrer pour trouver mon empreinte digitale de clé RSA actuelle?

Zakoff
la source
21
FWIW, je reviens toujours à ce message parce que github est l'endroit où je vois les empreintes digitales sur les clés et je veux m'assurer que j'utilise la clé privée correspondante. peut-être que cela justifie une balise github puisque ce message aide cette enquête liée à github?
hamx0r
4
@ hamx0r Je suis revenu sur ce post parce que Gitlab utilise également ces empreintes digitales ...
Ray Foss
1
J'y suis venu à cause de Travis, qui l'utilise également. : D
Per Lundberg
4
Pour tous ceux qui utilisent Linux qui "reviennent constamment sur cette page", copiez ceci dans votre bashrc: function fingerprint() { ssh-keygen -lf $1 -E md5 }Ensuite (après avoir source le bashrc), vous pouvez obtenir une empreinte digitale avecfingerprint ~/.ssh/key_file
Jeff Diederiks
1
Pour ceux qui essaient la fonction @JeffDiederiks et se demandent pourquoi cela ne fonctionne pas, les fonctions Bash ont besoin d'une traînée ;dans le corps, alors utilisez function fingerprint() { ssh-keygen -lf $1 -E md5; }plutôt.
tjjfvi

Réponses:

1261

Exécutez la commande suivante pour récupérer l'empreinte SHA256 de votre clé SSH ( -lsignifie «liste» au lieu de créer une nouvelle clé, -fsignifie «nom de fichier»):

$ ssh-keygen -lf /path/to/ssh/key

Ainsi, par exemple, sur ma machine, la commande que j'ai exécutée était (à l'aide de la clé publique RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

Pour obtenir le format d'empreinte digitale GitHub (MD5) avec les nouvelles versions de ssh-keygen, exécutez:

$ ssh-keygen -E md5 -lf <fileName>

Informations bonus:

ssh-keygen -lffonctionne également sur known_hostset authorized_keysfichiers.

Pour trouver la plupart des clés publiques sur les systèmes Linux / Unix / OS X, exécutez

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(Si vous voulez voir l'intérieur des homedirs des autres utilisateurs, vous devrez être root ou sudo.)

Le ssh-add -lest très similaire, mais répertorie les empreintes digitales des clés ajoutées à votre agent. (Les utilisateurs d'OS X prennent note que la magie sans mot de passe SSH via le trousseau n'est pas la même chose que l'utilisation de ssh-agent.)

Marvin Pinto
la source
5
Comment puis-je trouver quel est le chemin?
pal4life
4
Étant donné que votre exemple d'empreinte digitale hexadécimale est de 32 chiffres, je pense que ce serait une empreinte digitale MD5, n'est-ce pas? Par opposition à une empreinte digitale à 40 chiffres, ce qui indiquerait SHA1
culix
8
Sur les systèmes non Ubuntu, le fichier pertinent peut être dans / etc / ssh, par exemple /etc/ssh/ssh_host_rsa_key.pub
Zorawar
12
Il convient de noter que l'empreinte digitale doit être la même pour les deux clés d'une paire de clés publique / privée; donc l'empreinte digitale de .ssh/id_rsadevrait être la même que celle de .ssh/id_rsa.pub. Donc, vous pouvez utiliser l'un ou l'autre (et, si vous êtes comme moi et que vous aimez le tabulation, cela fait que le travail prend 2 touches de moins. Efficacité!).
Parthian Shot
25
utiliser ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubsi vous ne voulez pas la sortie standard sha256
user8162
677

Les nouvelles commandes SSH répertorieront les empreintes digitales en tant que clé SHA256 .

Par exemple:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

Si vous devez le comparer à une ancienne empreinte digitale, vous devez également spécifier d'utiliser la fonction de hachage d'empreinte digitale MD5 .

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

Aussi disponible: -E sha1

Mise à jour ... OUI ... oui ... Je sais ... Les clés DSA pour SSH ne devraient plus être utilisées, l'ancienne clé RSA ou les nouvelles clés écliptiques devraient être utilisées à la place.

À ces «administrateurs» qui continuent de modifier la commande que j'ai utilisée dans ce qui précède. Arrêtez de le changer! Vous faites la commande et la sortie qui en résulte ne correspondent pas!

anthony
la source
6
Il convient de mentionner ici que vous pouvez dire sshde vous montrer l'ancienne empreinte digitale MD5 du serveur ssh -o FingerprintHash=md5 example.org, comme mentionné dans cette réponse . (Je cherchais juste cela, et cette réponse m'a conduit à celle-ci, donc je pense que d'autres pourraient avoir une expérience similaire.)
Jonathan Y.
25
Cette réponse est très utile pour ceux qui souhaitent comparer leurs clés avec ce que montre github.com (c'est-à-dire le MD5 formaté en hexadécimal)
hamx0r
2
Également très utile pour ce qui se compare à ce que le mastic rapportera.
pjcard
27

Pour voir votre clé sur Ubuntu, entrez simplement la commande suivante sur votre terminal:

ssh-add -l

Vous obtiendrez une sortie comme celle-ci: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu (RSA)

Si toutefois vous obtenez une erreur comme; Could not open a connection to your authentication agent.
Cela signifie alors que ssh-agent n'est pas en cours d'exécution. Vous pouvez le démarrer / l'exécuter avec: ssh-agent bash(merci à @Richard dans les commentaires) puis relancerssh-add -l

Komu
la source
5
Si vous n'êtes pas sur Ubuntu, vous pourriez obtenir ce message malheureusement "Impossible d'ouvrir une connexion avec votre agent d'authentification."
rogerdpack
1
Cela ne fonctionne que si l'agent d'authentification est en cours d'exécution.
Rufflewind
Pour exécuter l'agent d'authentification, vous pouvez utiliser ssh-agent bashet poursuivre la vie. Dans la vie comme toujours; ssh-agentn'est pas garanti comme une implémentation cohérente sur tous les systèmes.
Richard Kenneth Niescior
Un autre conseil pour Linux; L'option -F (dump fingerprint) de ssh-keygen-g3 affichera l'empreinte digitale de la clé: $ ssh-keygen-g3 -F /path/to/keyfile.pub answers.ssh.com/questions/494/…
AnneTheAgile
18

Une paire de clés (les clés privée et publique) aura la même empreinte digitale; dans le cas où vous ne vous souvenez pas quelle clé privée appartient à quelle clé publique, trouvez la correspondance en comparant leurs empreintes digitales.

La réponse la plus votée de Marvin Vinto fournit l'empreinte digitale d'un fichier de clé SSH public . L'empreinte digitale de la clé SSH privée correspondante peut également être interrogée, mais elle nécessite une série d'étapes plus longue, comme indiqué ci-dessous.

  1. Chargez l'agent SSH, si vous ne l'avez pas encore fait. Le moyen le plus simple consiste à invoquer

    $ ssh-agent bash
    

    ou

    $ ssh-agent tcsh
    

    (ou un autre shell que vous utilisez).

  2. Chargez la clé privée que vous souhaitez tester:

    $ ssh-add /path/to/your-ssh-private-key
    

    Il vous sera demandé de saisir la phrase secrète si la clé est protégée par mot de passe.

  3. Maintenant, comme d'autres l'ont dit, tapez

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...est l'empreinte digitale que vous recherchez. S'il y a plusieurs clés, plusieurs lignes seront imprimées et la dernière ligne contient l'empreinte digitale de la dernière clé chargée.

  4. Si vous voulez arrêter l'agent (c'est-à-dire si vous avez appelé l'étape 1 ci-dessus), tapez simplement `exit 'sur le shell, et vous serez de retour sur le shell avant le chargement de l'agent ssh.

Je n'ajoute pas de nouvelles informations, mais j'espère que cette réponse est claire pour les utilisateurs de tous niveaux.

Wirawan Purwanto
la source
Le premier paragraphe est faux ssh-add -let ssh-keygen -lrenvoie la même empreinte digitale pour une paire de clés donnée. En outre, il doit être en minuscules -let non en majuscules.
Albertas Agejevas
Je ne conteste pas cela ssh-add -l etssh-keygen -l renvoie la même empreinte digitale pour une paire de clés donnée. Mais je ne comprends pas ce qui n'allait pas avec mes déclarations originales sur le premier paragraphe. J'ai ajouté une phrase pour clarifier.
Wirawan Purwanto
1
Il suffit de pointer ssh-keygen vers une clé, plutôt que de démarrer l'agent, puis de charger la clé, puis d'obtenir l'empreinte digitale.
Albertas Agejevas
1
Si vous ne disposez que de la clé privée, vous n'avez pas nécessairement besoin d'exécuter ssh-agent. En supposant que PRIVKEYle fichier de clé privée PUBKEYa été défini et qu'il a été défini sur le fichier de clé publique (initialement inexistant), faites: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"pour régénérer la clé publique SSH, alors ssh-keygen -E md5 -l -v -f "${PUBKEY}"si vous voulez le hachage MD5 ou simplement ssh-keygen -l -v -f "${PUBKEY}"si vous voulez le hachage SHA-256 (SHA-256 étant la valeur par défaut maintenant).
David Tonhofer
12

Le moyen le plus rapide si vos clés sont dans un agent SSH:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

Chaque clé de l'agent sera imprimée comme suit:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)
cmcginty
la source
3
J'avais besoin d'un moyen plus rapide de faire correspondre mes clés à celles de mon compte GitHub et cette réponse m'a aidé à le faire.
evanjs
11

Reproduire le contenu des forums AWS ici, car je l'ai trouvé utile pour mon cas d'utilisation - je voulais vérifier laquelle de mes clés correspondait à celles que j'avais importées dans AWS

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

Où: - primary.pemest la clé privée à vérifier

Phil
la source
9
$ ssh-add -l 

fonctionnera également sur Mac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite).

Il prend également en charge l'option -Ede spécifier le format d'empreinte digitale, donc dans le cas où MD5 est nécessaire (il est souvent utilisé, par exemple par GitHub), ajoutez simplement -E md5à la commande.

geeklizzard
la source
+1 pour la réponse la plus simple. De man ssh-addl'option -lest "Liste les empreintes digitales de toutes les identités actuellement représentées par l'agent"
XavierStuvw
8

Sous Windows, si vous exécutez PuTTY / Pageant, l'empreinte digitale est répertoriée lorsque vous chargez votre clé PuTTY (.ppk) dans Pageant. C'est assez utile au cas où vous oublieriez celui que vous utilisez.

Entrez la description de l'image ici

Dmitri R117
la source
3
Merci, Parfois, nous, les Linux, oublions les fenêtres, d'autant plus que l'OP a mentionné le mastic.
Jmons
@ DmitriR117 pourquoi avez-vous peint une clé publique noire telle qu'elle peut être connue du monde entier?
Michu93
8

C'est la fonction shell que j'utilise pour obtenir mon empreinte digitale SSH pour créer des gouttelettes DigitalOcean :

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

Mettez-le dans votre ~/.bashrc, sourcez-le, puis vous pouvez obtenir l'empreinte digitale comme suit:

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9
Bryce Guinta
la source
2

Si votre agent SSH est en cours d'exécution, il est

ssh-add -l

pour répertorier les empreintes digitales RSA de toutes les identités ou -Lpour répertorier les clés publiques.

Si votre agent n'est pas en cours d'exécution, essayez:

ssh-agent sh -c 'ssh-add; ssh-add -l'

Et pour vos clés publiques:

ssh-agent sh -c 'ssh-add; ssh-add -L'

Si vous obtenez le message: « L'agent n'a pas d'identité. ', vous devez d'abord générer votre clé RSA ssh-keygen.

kenorb
la source
J'ai installé openssh, puis tenté de me connecter au serveur en utilisant du mastic. Il présente une empreinte digitale ssh-ed25519 256 touches, mais je reçois le message "aucune identité". Savez-vous où cette clé peut être trouvée et répertoriée? Y a-t-il un inconvénient à utiliser cette clé, par rapport à la génération d'une nouvelle clé RSA?
lordcheeto
Je l'ai trouvé sous /etc/ssh/ssh_host_ed25519_key.pub. La deuxième partie de la question demeure: un inconvénient à utiliser cette clé générée automatiquement?
lordcheeto
1

Parfois, vous pouvez avoir un tas de clés dans votre ~/.sshrépertoire, et vous ne savez pas qui correspond à l'empreinte digitale affichée par GitHub / Gitlab / etc.

Voici comment afficher les noms de fichiers clés et les empreintes digitales MD5 de toutes les clés de votre ~/.sshrépertoire:

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(Pour ce que signifient les paramètres, reportez-vous à cette réponse sur la findcommande .

Notez que les fichiers privés / publics qui appartiennent à une clé ont la même empreinte digitale, vous verrez donc des doublons.

Dan Dascalescu
la source
0

Google Compute Engine affiche l'empreinte de la clé d'hôte SSH dans la sortie série d'une instance Linux. L'API peut obtenir ces données de GCE, et il n'est pas nécessaire de se connecter à l'instance.

Je ne l'ai trouvé nulle part ailleurs que dans la sortie série. Je pense que l'empreinte digitale devrait être dans un endroit plus convivial pour les programmeurs.

Cependant, il semble que cela dépend du type d'instance. J'utilise des instances de Debian 7 (Wheezy) f1-micro.

re Paul
la source
-1

Pour vérifier un serveur SSH distant avant la première connexion, vous pouvez consulter le site www.server-stats.net/ssh/ pour voir toutes les clés SHH du serveur, ainsi que lorsque la clé est connue.

Ce n'est pas comme un certificat SSL, mais c'est incontournable avant de vous connecter à un serveur SSH pour la première fois.

p974
la source
4
L'utilisateur ne recherchait pas un site Web tiers, mais une ligne de commande à partir du système d'exploitation lui-même.
Andrew Barber
C'est donc essentiellement le plugin de convergence , à l'exception de SSH au lieu de SSL, et avec un seul notaire (quelque peu incertain). Ce son est à peu près vrai?
Parthian Shot
-1

Sur Fedora, je fais locate ~/.sshce qui me dit que les clés sont à

/root/.ssh
/root/.ssh/authorized_keys
Jesse William Mac Dougall
la source
1
L'OP semble savoir où trouver leurs clés (ce n'est pas ça, ~/.ssh/id*.pubc'est) et veut obtenir leurs empreintes digitales.
Gert van den Berg