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.