web-dev-qa-db-fra.com

Quelle commande dois-je utiliser pour voir l’empreinte digitale de la clé ECDSA de mon serveur?

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.

68
trusktr

Attends, je l'ai trouvé. Exécutez la commande:

ssh-keygen -l -f /etc/ssh/ssh_Host_ecdsa_key.pub
105
trusktr

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:

  • si votre sshd s'exécute sur un port personnalisé, ajoutez '-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 vers ssh-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
14
VonC

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.

7
David Elrod

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

  • Côté serveur
$ 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..    |
+-----------------+
  • Côté client
$ 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.

2
Nicolas VERHELST