GNU/Linux >> Tutoriels Linux >  >> Linux

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

Commandes utilisées

  • Afficher l'ascii-art de la clé publique de l'hôte stockée sur le serveur (à faire côté serveur, celui auquel vous vous connectez via ssh) :

    ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    -l :Afficher l'empreinte du fichier de clé publique spécifié.

    -v :visuel (ascii-art)

    -f :fichier

  • Afficher l'ascii-art de la clé d'hôte publique du serveur distant (à faire côté client, celui à partir duquel vous vous connectez via ssh) :

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    

    -o :choix

    visualhostkey :visuel (ascii-art)

    Hachage d'empreintes digitales :algo de hachage à utiliser

Que faire pour vérifier l'authenticité d'un hôte/serveur

La première, 1. est à faire localement sur le serveur (celui auquel vous souhaitez vous connecter via ssh ) :cela 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 ascii-art. Si l'ascii-art est le même, alors vous pouvez répondre oui au "est-ce que j'ai confiance ?" question (c'est-à-dire 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)? 

Plus d'explications

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 l'hôte public clé du serveur. Lorsqu'un client se connecte (pas seulement pour la première fois), le serveur enverra 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 post). Si la clé publique n'est pas dans le fichier, alors le client calculera l'empreinte de cette clé publique d'hôte avec un algorithme de hachage (un algo de hachage différent donnera une empreinte différente). Cette empreinte précédemment calculée s'affiche (accompagnée de l'ascii-art si l'option correspondante est fournie) et vous devrez répondre oui ou non selon que vous reconnaissez cette empreinte ou non (cette empreinte est l'image/hash de la clé publique de l'hôte serveur). Si vous répondez oui, alors la clé publique du serveur (pas son empreinte digitale) sera ajoutée au fichier ~/.ssh/known_hosts .

On peut remarquer que ~/.ssh/known_hosts est sous votre répertoire personnel (~), parce que vous faire confiance à cet hôte (serveur), mais un autre utilisateur peut ne pas faire confiance au même que vous. De plus, la clé publique hôte 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'algorithme de hachage donné dans les options). C'est la même chose que de faire uniquement ssh, mais avec plus d'options visuelles, donc la connexion continuera de la même manière qu'une connexion ssh normale.


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 génère une chaîne dans un format qui correspond à l'erreur que j'ai vue sur le client.


Attends, j'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 scripté 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ù le bash redirection '2>&1 ' (qui peut varier selon votre shell)

C'est la ligne que j'ai ajoutée à mon ~/.ssh/known_hosts file 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é publique.
    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

Linux
  1. Comment utiliser la commande basename ?

  2. Comment utiliser la commande ssh-keygen pour configurer ssh sans mot de passe

  3. Comment utiliser la commande ssh-keygen sous Linux

  4. À quoi sert $# dans Bash

  5. A quoi sert l'option -o dans la commande useradd ?

Qu'est-ce que la commande Linux Watch + Exemples

Comment utiliser la commande Linux Ping

Qu'est-ce que la commande SSH et comment utiliser SSH pour se connecter à un serveur distant

Qu'est-ce que la commande kill sous Linux ?

Qu'est-ce que la vulnérabilité Logjam ?

Utilisation de la commande grep sous Linux