Comment ne plus avoir le message nous disant que la signature de notre clé (l'empreinte) ne correspond pas à celle qui se trouve dans le fichier known_hosts.
Je souhaitais exécuter un script shell avec un ensemble de commandes rsync pour faire des copies et des synchronisations de fichiers et répertoires. Rsync est super pratique et adapté pour faire des backups, des copies récursives avec ou sans compression et bien plus. Je ne m'étends pas ici sur la puissance de la commande mais plutôt sur les problèmes de fingerprints (empreintes) de la clé publique dans le fichier ~/.ssh/known_hosts. Quand elle diffère de celle connue dans le fichier known_hosts. On a parfois des messages du style :
Warning: the ECDSA host key for 'domaine.com' differs from the key for the IP address 'xx.yy.ee.zz'
Offending key for IP in /monuser/.ssh/known_hosts:3
Matching host key in /monuser/.ssh/known_hosts:6
On peut lancer la commande ssh-keygen -R Hostname
: -R va supprimer toutes les clés appartenant à un nom d'hôte d'un fichier known_hosts
Ce n'est pas une solution à mettre en œuvre sur un serveur en production pour des raisons certaines de sécurité mais ça fonctionne.
Pour éviter d'avoir à confirmer son action Are you sure you want to continue connecting (yes/no)?
, j'ai ajouté la directive ssh dans ma commande rsync pour ne plus avoir la demande de confirmation qui arrête l'exécution de mon script. Cela ressemble à :
rsync -av -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" utilisateur@domaine.com:/source/de/mon/contenu /repertoire/de/destination
-a : mode archive (alias des options -rlptgoD) je vous laisse lire la doc pour plus de détails
-v : mode verbeux pour voir s'afficher les fichiers copiés et/ou supprimés
-e : l'option qui nous intéresse ici pour lancer une commande ssh qui va nous désactiver la vérification de l'empreinte de notre clé.
ssh -o 'StrictHostKeyChecking no' utilisateur@domaine.com
On ajoute dans notre ~/.ssh/config
UserKnownHostsFile=/dev/null
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Avec cela vous n'avez plus le prompt pour répondre à la question Are you sure you want to continue connecting (yes/no)?
et mon script s'exécute sans interruption.