Je vois des choses partout sur Google sur la façon de voir l'empreinte digitale de la clé RSA, mais pas l'empreinte digitale ECDSA.
Attends, je l'ai trouvé. Exécutez la commande:
ssh-keygen -l -f /etc/ssh/ssh_Host_ecdsa_key.pub
Avec un ssh récent (OpenSSH_6.0p1, OpenSSL 1.0.0j 10 mai 2012), je l'ai écrit comme ceci:
ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=
Remarques:
-p portNumber
' au ssh-keyscan
commande)ssh-keyscan
écrit sur stderr
, pas stdout
(!), d'où la redirection bash
'2>&1
'(qui peut varier selon votre Shell)C'est la ligne que j'ai ajoutée à mon ~/.ssh/known_hosts
fichier afin d'autoriser les requêtes ssh de localhost pour mes tests (principalement pour gitolite, qui utilise ssh ).
Daniel Böhmer confirme dans les commentaires :
ssh-keyscan
fournit la ou les clés publiques complètes du serveur SSH- la sortie de
ssh-keygen
est presque identique au format des fichiers de clés publiques.
Supprimez simplement la 1ère colonne (adresse IP ou nom d'hôte) et enregistrez-la ou dirigez-la versssh-keygen -l
qui présente l'empreinte digitale.
Daniel ajoute:
Afficher les empreintes digitales de toutes les clés publiques du serveur stockées dans
~/.ssh/know_hosts
:
cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
Sur mon système, je dois spécifier une clé MD5 au lieu du SHA256 par défaut:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_Host_ecdsa_key.pub
Cela a produit une chaîne dans un format qui correspond à l'erreur que j'ai vue sur le client.
Commandes utilisées
Affiche l'ascii-art de la clé d'hôte publique stockée sur le serveur (à faire côté serveur, celle à laquelle vous vous connectez via ssh):
ssh-keygen -l -v -f /etc/ssh/ssh_Host_ecdsa_key.pub
- l: affiche l'empreinte digitale du fichier de clé publique spécifié.
- v: visuel (ascii-art)
- f: fichier
Affiche l'ascii-art de la clé d'hôte publique du serveur distant (à faire côté client, celle à partir de laquelle vous vous connectez via ssh):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <Host_server_to_connect>
- o: option
visualhostkey: visuel (ascii-art)
FingerprintHash: algo de hachage à utiliser
Que faire pour vérifier l'authenticité d'un hôte/serveur
Tout d'abord, 1. doit se faire localement sur le serveur (celui auquel vous souhaitez vous connecter via ssh): il vous donnera un premier ascii-art. Imprimez-le ou prenez une photo.
Deuxièmement, 2. doit être fait lors de la première connexion SSH; il affichera un deuxième art ascii. Si l'ascii-art est le même, alors vous pouvez répondre oui au "ai-je confiance?" question (ie Are you sure you want to continue connecting (yes/no)
).
Exemple
$ ssh-keygen -l -v -f /etc/ssh/ssh_Host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6 (ECDSA)
+--[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+-----------------+
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of Host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)?
Quelques explications supplémentaires
La première commande affichera l'ascii-art correspondant à l'empreinte digitale du fichier que vous donnez en entrée. Le fichier que vous donnez en entrée est la clé publique Host du serveur. Lorsqu'un client se connecte (pas seulement pour la première fois), le serveur envoie sa clé d'hôte publique. Cette clé d'hôte publique sera recherchée dans ~/.ssh/known_hosts
. Si la clé publique est dans le fichier, alors ça va: l'hôte (serveur) est connu, nous passons donc à l'étape suivante pour authentifier l'utilisateur (l'authentification de l'utilisateur n'est pas décrite dans ce billet). Si la clé publique n'est pas dans le fichier, le client calculera l'empreinte de cette clé d'hôte publique avec un algorithme de hachage (un algo de hachage différent donnera une empreinte digitale différente). Cette empreinte digitale précédemment calculée s'affiche (avec l'ascii-art si l'option correspondante est fournie) et vous devrez répondre oui ou non selon que vous reconnaissez cette empreinte digitale ou non (cette empreinte digitale est l'image/le hachage de la clé d'hôte publique du serveur). Si vous dites oui, alors la clé publique du serveur (pas son empreinte digitale) sera ajoutée au fichier ~/.ssh/known_hosts
.
Nous pouvons remarquer que ~/.ssh/known_hosts
Est sous votre répertoire personnel (~), car vous faites confiance à cet hôte (serveur), mais à un utilisateur différent peut ne pas faire confiance à la même chose que vous. De plus, la clé publique Host du serveur ne dépend pas de l'utilisateur, elle est donc stockée dans /etc/ssh/
.
La deuxième commande affichera l'empreinte digitale et l'ascii-art de la clé publique reçue du Host_server_to_connect (selon l'algo de hachage donné dans les options). C'est la même chose que de faire seulement ssh, mais avec plus d'options visuelles, donc la connexion continuera de la même manière qu'une connexion ssh normale.