Vérifiez l'empreinte digitale de la clé ECDSA envoyée par l'hôte distant [fermé]

24

J'ai le message d'avertissement bien connu lorsque j'essaie de ssh dans un serveur:

$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:10
ECDSA host key for ipofmyhost has changed and you have requested strict checking.
Host key verification failed.

Et je sais pourquoi parce que j'ai changé l'ip d'un tel serveur. Mais si ce n'était pas le cas, comment pourrais-je vérifier l'empreinte digitale de la clé ECDSA envoyée par l'hôte distant?

J'ai essayé de le faire en:

echo -n ipofthehost | sha256sum

Mais je n'ai pas la même empreinte digitale. J'ai aussi essayé "hostname, ip" un peu comme dans aws mais je n'ai rien trouvé.

Si je supprime l'entrée de mon fichier known_hosts et que j'essaie à nouveau de ssh, il réussit et indique ce qui suit:

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

Alors, à quoi applique-t-il le sha256sum pour obtenir l'empreinte digitale et comment puis-je le vérifier?

gugol
la source
2
Sans une bonne valeur connue, vous ne pouvez pas la vérifier. Vous ne l'écrivez que la première fois que vous démarrez le SSHd et les clés sont générées, et vérifiez cette bonne valeur connue.
J'ai édité votre question. Ce site accepte uniquement les questions sur un environnement professionnel. Les questions de réseautage à domicile sont hors sujet ici, j'ai essayé d'enregistrer votre question avec ma modification. Actuellement, il y a un vote contre votre question pour clore ce sujet.
Peterh dit réintégrer Monica
@ user186340 Il semble vrai que "vous ne l'écrivez que la première fois que vous démarrez le SSHd". Si vous avez accès à la machine exécutant SSHd, vous pouvez faire /etc/ssh/ssh_host_ecdsa_key.pubpour obtenir l'empreinte digitale. Je viens de faire.
jamadagni

Réponses:

12

Une empreinte digitale de clé publique n'est pas le simple hachage d'une chaîne IP.

Pour récupérer une clé publique d'hôte distant, vous pouvez utiliser ssh-keyscan <IP>puis vous pouvez utiliser les outils habituels pour extraire son empreinte digitale ( ssh-keygen -lf <public_key_file>).

Enfin, vous pouvez comparer à l'empreinte digitale actuelle dans votre known_hostsfichier avec ssh-keygen -l -F <domain_or_ip>.

Xavier Lucas
la source
2
Je ne comprends pas pourquoi lorsque je me connecte via SSH et que je force une clé ecdsa pour la première fois ( ssh -oHostKeyAlgorithms='ecdsa-sha2-nistp256' [email protected]), cela me donne une empreinte digitale alphanumérique à 43 chiffres ( ECDSA key fingerprint is SHA256:sBKcTiQ5V.... etc.) mais quand je cours, ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pubj'obtiens un hex de 32 caractères ??
William Turrell
1
@WilliamTurrell Cela se produit parce que votre serveur doit avoir une version plus ancienne (probablement pré-openSSH 6.8) de ssh-keygen(ou votre fournisseur de serveur n'a pas suivi l'heure et ne fournit toujours que des hachages md5 au lieu du nouveau SHA256). Il existe des solutions de contournement répertoriées ici: superuser.com/questions/929566
SeldomNeedy
9

Un peu plus en détail : le message d'avertissement faisant référence à l'empreinte digitale de la clé ECDSA envoyée par l'hôte distant, nous recueillons les informations sur la clé publique (ecdsa) de l'hôte:

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

Ensuite, nous pouvons découvrir où dans notre fichier known_hosts se trouve cette clé publique (ecdsa):

ssh-keygen -l -F ipofhost

Si nous voulons comparer les empreintes digitales que nous devons mettre le contenu de notre fichier known_hosts (juste l'entrée liée à cet hôte), nous pouvons l'appeler ecdsa_file_from_known_hosts puis les comparer comme suit:

ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts

Et vérifiez si le spectacle a le même hachage.

Bien sûr, ils ne correspondent pas, c'est pourquoi j'ai reçu le message d'avertissement (ssh vérifie cette correspondance en interne). Si nous sommes sûrs du changement d'ip (donc nous ne subissons pas d'attaque de l'homme du milieu), nous pouvons simplement supprimer l'entrée de cet hôte dans notre fichier known_hosts et la prochaine fois que nous y ajouterons une nouvelle entrée pour il sera ajouté à ce fichier.

gugol
la source