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 de nouveau 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-on le sha256sum pour obtenir l'empreinte digitale et comment pourrais-je le vérifier?
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>
vous pouvez alors 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_hosts
fichier avec ssh-keygen -l -F <domain_or_ip>
.
n peu plus en détail: Parce que le message d'avertissement fait 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 savoir 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.