Warning: remote host identification has changed!


Shell Script
Lorsque l'on réinstalle un serveur Linux et que l'on établit une nouvelle connexion SSH vers celui-ci, on se retrouve souvent avec ce message d'erreur : Warning: remote host identification has changed ! Cela signifie que vos clefs SSH ont changé.

$ ssh user@serveur
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
48:95:46:71:ab:c8:e8:2d:99:48:15:33:ad:ae:8f:6f.
Please contact your system administrator.
Add correct host key in /home/pti-seb/.ssh/known_hosts to get rid of this message.
Offending key in /home/pti-seb/.ssh/known_hosts:6
RSA host key for serveur.fr has changed and you have requested strict checking.
Host key verification failed.

Pour résoudre ce problème, il faut mettre à jour votre fichier known_hosts. Vous pouvez le faire automatiquement avec cette ligne de commande :

ssh-keygen -R adresse-ip-du-serveur

Voici un exemple d'utilisation :

$ ssh-keygen -R mon_serveur
/home/pti-seb/.ssh/known_hosts updated.
Original contents retained as /home/pti-seb/.ssh/known_hosts.old

Attention : si jamais vous n'avez pas réinstallé votre serveur ou changé quoique ce soit au niveau d'OpenSSH, ce message est sans aucun doute révélateur d'un attaque de type Man in the Middle sur votre réseau.


13 Commentaires pour "Warning: remote host identification has changed!"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Et pour une machine qui est assez souvent réinstallée, on peut modifier ~/.ssh/config en conséquence:

    Host mon_serveur
    user root
    port 22
    # Ne pas vérifier la clé de l'host:
    # Utile pour les machines de tests, réinstallées souvent ou les nœuds de cluster, ...
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no

    =)

    RépondreRépondre
    Gardouille , le 14 septembre 2011 à 08:39
  •  

    Très bonne astuce même si pour ma part je fait un vim ~/.ssh/known_hosts :D .

    RépondreRépondre
    DarKou , le 14 septembre 2011 à 09:15
  •  

    De même, une suppression direct de la ligne et c'est fini =)
    Mais cette solution n'est pas plus mal.

    RépondreRépondre
    kirk , le 14 septembre 2011 à 09:23
  •  

    Notez que cette manip (ssh-keygen -R mon_serveur) s'affiche depuis Ubuntu Natty.
    Pour ma part, avant je fais un vim ~/.ssh/known_hosts +n° de la ligne indiqué puis un dd une fois le fichier ouvert, et naturellement un :wq pour enregistrer la modif et quitter.

    RépondreRépondre
    crash , le 14 septembre 2011 à 09:39
  •  

    Moi perso j'utilise nano ~/.ssh/known_hosts et je supprime la dernière ligne du fichier vue que j'ai qu'un serveur, et j'ai pas de souci

    RépondreRépondre
    totof , le 14 septembre 2011 à 09:56
  •  

    @totof : dans ce cas, le plus rapide pour toi c'est carrément un rm -f ~/.ssh/known_hosts

    RépondreRépondre
    crash , le 14 septembre 2011 à 10:09
  •  

    @Gardouille : sympa ton fichier de conf ;) Merci

    RépondreRépondre
    crash , le 14 septembre 2011 à 10:10
  •  

    bonnes remarques dans cet article. Un complément ici.

    bonne lecture :-)

    RépondreRépondre
    hornetbzz , le 14 septembre 2011 à 11:49
  •  

    Moi aussi j'ai l'habitude de faire une édition du fichier ~/.ssh/known_hosts et supprimer la ligne en question. Mais quand tu gère beaucoup de serveur, le fichier peut faire plus de 100 lignes et là, la commande ssh-keygen permet de gagner du temps.

    Faut juste l'apprendre par cœur après.

    RépondreRépondre
    pti-seb , le 14 septembre 2011 à 12:13
  •  

    Il y a une autre solution aussi : juste avant de réinstaller la machine, il faut sauvegarder la signature ssh du serveur dans /etc/ssh et le remettre une fois que la réinstall a été faite.

    RépondreRépondre
    rouc1 , le 14 septembre 2011 à 13:39
  •  

    @crash : sed -i 'line d' ~/.ssh/known_hosts

    Mais c'est vrai qu'ubuntu donne directement la commande. Le plus propre restant bien sûr de sauvegarder/restaurer sa conf ssh.

    RépondreRépondre
    R@OUL , le 14 septembre 2011 à 21:33
  •  

    @rouc1 : dans /etc/ssh, il faut sauvegarder quel fichier exactement ?

    RépondreRépondre
    pti-seb , le 14 septembre 2011 à 23:41
  •  

    @pti-seb :
    Il me semble que ce sont les fichiers ssh_host_dsa_key, ssh_host_dsa_key.pub, ssh_host_rsa_key, ssh_host_rsa_key.pub .

    Tu peux d'ailleurs vérifier que la ligne dans le known_hosts pour un host donné est le contenu d'un des 2 fichiers .pub (qui correspond à la clé publique de ce host).

    RépondreRépondre
    rouc1 , le 15 septembre 2011 à 00:02
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité redhat red hat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum