SSH et le changement d'empreinte

Si un serveur est réinstallé, son empreinte SSH peut changer, ce qui pose des soucis aux clients qui veulent s'y connecter à nouveau.

1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Ce message s'explique par le fait que cette empreinte est récupérée à la 1ère connexion et stockée localement sur le poste client dans $HOME/.ssh/known_hosts

On a ce message à la connexion à un nouveau serveur :

1ssh 10.0.0.1
2The authenticity of host '10.0.0.1 (10.0.0.1)' can't be established.
3ED25519 key fingerprint is SHA256:llmB44kKEsDxqY2OWY8mBGd9DpWLrnjoLCmKbf7v0HA.
4This key is not known by any other names.
5Are you sure you want to continue connecting (yes/no/[fingerprint])?

Si on accepte, la ligne suivante est ajoutée dans $HOME/.ssh/known_hosts

1|1|gpGTgdu701VgjRJOKCFOl0JNIKI=|Ih/OZRpdSxeUCb9uuPzfcp48WDg= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKiKeLqlvvdzJEJ13esXKyIWuVJ14wF28Iz5sUtZj8c4

à noter que le host peut être hashé.

Pour "oublier" un serveur, on utilise la commande suivante :

1ssh-keygen -R 10.0.0.1
2# Host 10.0.0.1 found: line 11
3/home/<user>/.ssh/known_hosts updated.
4Original contents retained as /home/<user>/.ssh/known_hosts.old

Si le serveur n'était pas connu on a ce type de sortie

1$ ssh-keygen -R 10.0.0.1
2Host 10.0.0.1 not found in /home/<user>/.ssh/known_hosts

Pour récupérer par anticipation l'empreinte d'un serveur et l'ajouter au known_hosts

1ssh-keyscan 10.0.0.1 >> $HOME/.ssh/known_hosts

Utile dans le cas d'un provisionnement pour que vos scripts qui interagissent en ssh puissent fonctionner dès leur première utilisation.

Un autre cas d'usage est si on a clôné un serveur par exemple dans une VM. Les 2 VMs auront la même empreinte mais on ne veut pas les réinstaller, on veut juste regénérer, côté serveur, les empreintes. Réfléchissez bien avant d'exécuter ces commandes en root !

Pour celà on va effacer côté serveur toutes les clés d'hôte :

1# rm /etc/ssh/ssh_host_*_key /etc/ssh/ssh_host_*_key.pub
2rm: remove regular file '/etc/ssh/ssh_host_ecdsa_key'? y
3rm: remove regular file '/etc/ssh/ssh_host_ed25519_key'? y
4rm: remove regular file '/etc/ssh/ssh_host_rsa_key'? y
5rm: remove regular file '/etc/ssh/ssh_host_ecdsa_key.pub'? y
6rm: remove regular file '/etc/ssh/ssh_host_ed25519_key.pub'? y
7rm: remove regular file '/etc/ssh/ssh_host_rsa_key.pub'? y

Puis les regénérer :

1# ssh-keygen -A
2ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519

Il n'est pas nécessaire de redémarrer le service ssh, la prise en compte des clés se fait dès la prochaine connexion d'un client.

comments powered by Disqus