239 votes

"Ajouter la clé hôte correcte dans known_hosts" / plusieurs clés hôte SSH par nom d'hôte?

En essayant de vous connecter en ssh sur un ordinateur que je contrôle, je reçois le message familier :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    AVERTISSEMENT : L'IDENTIFICATION DE L'HÔTE À DISTANCE A CHANGÉE !     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IL EST POSSIBLE QUE QUELQU'UN FASSE QUELQUE CHOSE DE MALVEILLANT !
Quelqu'un pourrait être en train de vous écouter en ce moment (attaque de l'homme du milieu) !
Il est également possible qu'une clé d'hôte ait été changée.
L'empreinte pour la clé RSA envoyée par l'hôte à distance est
[...].
Veuillez contacter votre administrateur système.
Ajoutez la clé d'hôte correcte dans /home/sward/.ssh/known_hosts pour vous débarrasser de ce message.
Clé RSA offensante dans /home/sward/.ssh/known_hosts:86
La clé hôte RSA pour [...] a changé et vous avez demandé une vérification stricte.
La vérification de la clé d'hôte a échoué.

En effet, j'ai bien changé la clé. Et j'ai lu plusieurs dizaines de messages indiquant que la façon de résoudre ce problème est de supprimer l'ancienne clé du fichier known_hosts.

Mais ce que j'aimerais, c'est que ssh accepte à la fois l'ancienne clé et la nouvelle clé. Le langage du message d'erreur ("Ajouter la clé d'hôte correcte") suggère qu'il devrait y avoir un moyen d'ajouter la clé d'hôte correcte sans supprimer l'ancienne.

Je n'ai pas réussi à trouver comment ajouter la nouvelle clé d'hôte sans supprimer l'ancienne.

Est-ce possible, ou le message d'erreur est-il simplement très trompeur ?

13 votes

Voici le clé hôte qui génère l'erreur. Un hôte devrait avoir une seule et unique clé. Cela n'a rien à voir avec les clés client ou utilisateur. Avez-vous une seule et même adresse IP qui flotte entre des hôtes distincts ou quelque chose d'autre?

5 votes

Dans mon cas, je sais que je vais changer souvent entre les deux clés dans un avenir proche tout en bidouillant certaines choses. Il semble que cela serait également utile dans la situation d'une seule IP avec plusieurs hôtes que vous suggérez. En gros, je veux juste savoir si c'est possible pour mon propre apprentissage, à part toute application pratique particulière.

0 votes

@DavidSchwartz +1 concernant votre commentaire - cela pourrait se produire en raison des adresses IP dynamiques dans le même réseau local (LAN)

217voto

quanta Points 49664
  1. obtenez la clé rsa de votre serveur, où server_ip est l'adresse IP de votre serveur, par exemple 192.168.2.1:

    $ ssh-keyscan -t rsa server_ip

    Réponse d'exemple :

    # server_ip SSH-2.0-OpenSSH_4.3
    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
  2. et sur le client, copiez l'intégralité de la ligne de réponse server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG..., et ajoutez cette clé au bas de votre fichier ~/.ssh/known_hosts:

    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqx9m529...(la clé incriminée, et/ou tout en bas du fichier `known_hosts`)
    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG... (ligne que vous ajoutez, copiée et collée ci-dessus)

16 votes

Cela a fonctionné! Cependant, j'utilise "HashKnownHosts", donc l'entrée semblait un peu déplacée. Heureusement, ssh_config(5) m'a dirigé vers ssh-keygen(1) qui expliquait que je pouvais utiliser "ssh-keygen -H" pour hacher les entrées non hachées. Merci!

3 votes

Cette "fonctionne" mais vous ne vérifiez pas la clé, vous êtes donc vulnérable aux attaques de type mitm...

3 votes

@JasperWallace, tant que la première étape est effectuée via une connexion sécurisée (par exemple en utilisant localhost), cela devrait être assez sûr, je pense

160voto

Luis Abarca Points 1429

Supprimez cette entrée de known_hosts en utilisant :

ssh-keygen -R *adresse_ip_ou_nom_hôte*

Cela supprimera l'IP ou le nom d'hôte problématique du fichier known_hosts et essaiera de se connecter à nouveau.

Depuis les pages de manuel :

-R nom_hôte
Supprime toutes les clés appartenant à nom_hôte d'un fichier known_hosts. Cette option est utile pour supprimer les hôtes hachés (voir l'option -H ci-dessus).

20 votes

Comment ajouter la nouvelle clé hôte sans supprimer l'ancienne.

4 votes

Votre question apparaît en deuxième position lorsque je google "git ssh update host key automatically". Cette réponse est exactement ce que je cherchais. Ouvrir une nouvelle question avec ce que je veux pourrait la faire fermer comme doublon.

0 votes

Le nom d'hôte fonctionne également

31voto

Mark Points 348

Un moyen très simple est :

cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak

Ensuite, éditez known_hosts pour effacer la clé d'origine et SSH vers l'hôte à nouveau. Il ajoutera automatiquement la nouvelle clé.

Ensuite, comparez les deux fichiers. Un programme tel que meld est un bel outil de comparaison. Ensuite, fusionnez les fichiers pour que known_hosts contienne les deux clés. (apt-get / yum install le nom est simplement meld)

Ma 'raison' de conserver deux clés est que le système de destination est multiboot. Même si je dirais qu'il existe un moyen de synchroniser les clés à travers les installations, il semble plus simple de permettre plusieurs clés.

Modifier 2015-06

Commenter temporairement l'entrée known_hosts

En y revenant maintenant, je remarque un moyen encore plus simple, tant que l'entrée est identifiable—normalement à partir du nom d'hôte / de l'adresse IP, tout à fait à part du message d'erreur faisant référence à son emplacement spécifique;

  1. Éditez known_hosts pour ajouter temporairement # au début de l'ancienne entrée.
  2. SSH vers l'hôte, en acceptant le prompt pour ajouter la nouvelle clé 'automatiquement'.
  3. Ensuite, ré-éditez known_hosts pour supprimer le #.

Forcer un alias temporaire d'hôte

Il y a même l'option HostKeyAlias, comme dans

ssh -o HostKeyAlias=mynewaliasforthemachine nom@ordinateur

Votre client SSH ajoutera la nouvelle clé sous l'alias. Ensuite, vous pouvez soit éditer known_hosts pour substituer le 'vrai' nom d'hôte / adresse IP pour l'alias, soit vous connecter à cette incarnation de cet hôte avec l'option alias pour toujours.

0 votes

Cette 'fusion' ? meldmerge.org

0 votes

C'est le meld :) apt-get / yum install name est simplement meld

0 votes

J'ai fait une variante de votre suggestion qui a bien fonctionné - au lieu de cp, mv, puis ssh, puis cat ~/.ssh/known_hosts.bak ~/.ssh/known_hosts > tmp; mv tmp ~/.ssh/known_hosts

8voto

Mikaela Points 141

Si votre client et votre serveur ont tous deux OpenSSH 6.8 ou une version ultérieure, vous pouvez utiliser l'option UpdateHostKeys yes dans votre fichier ssh_config ou ~/.ssh/config. Par exemple :

Host *
    UpdateHostKeys yes

Cela permet à SSH de stocker toutes les clés d'hôte que le serveur possède dans le fichier known_hosts, et lorsque qu'un serveur modifie ou supprime une clé d'hôte, la clé est également modifiée ou supprimée dans votre fichier known_hosts.

0 votes

Ceci est de loin la réponse la plus utile! Bien qu'elle n'offre pas explicitement un moyen de résoudre la question initiale si une clé hôte a déjà été modifiée, toutes les autres réponses sont peu sécurisées car elles ne vérifient pas la nouvelle clé hôte. Cette option vous permet d'effectuer un basculement sécurisé vers de nouvelles clés hôtes.

6voto

Mike Points 181

J'ai le même problème avec un raspberry pi que je démarre avec plusieurs systèmes différents (système de développement pour compiler des binaires arm, projet, xbmc, etc.) et j'ai rencontré le même problème. Ils utilisent DHCP sur un réseau local et mon routeur a toujours réutilisé la même adresse IP puisque l'adresse MAC était la même. J'ai résolu le problème en utilisant des noms de domaine différents dans mon fichier hosts :

10.10.10.110 pi-dev
10.10.10.110 pi-xbmc
10.10.10.110 pi-etc

Le fichier known_hosts enregistre les empreintes digitales par nom d'hôte, donc même s'il s'agit de la même adresse IP, chaque nom d'hôte unique obtient une entrée différente.

J'en ai eu assez d'ajouter les noms aux fichiers hosts à chaque fois que j'utilisais un nouveau système, alors j'ai trouvé un moyen encore plus paresseux en utilisant des zéros en tête des adresses IP comme :

$ ssh pi@10.10.10.110
$ ssh pi@010.10.10.110
$ ssh pi@10.010.10.110

Chaque variation de l'adresse IP (non canonisée) obtient sa propre entrée dans known_hosts.

1 votes

Les gens d'OpenSSH ont fini par me repérer, cette faille ne fonctionne plus dans les versions plus récentes.

1 votes

Vous pouvez utiliser CheckHostIP no dans ~/.ssh/config pour pouvoir toujours utiliser la faille. Vous pouvez même définir vos alias là-bas afin de ne pas avoir à manipuler /etc/hosts et définir CheckHostIP no uniquement pour ces 3 noms d'hôtes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X