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)

1voto

Sven Points 95985

Je ne vois pas pourquoi vous voulez travailler avec deux clés, mais vous pouvez certainement ajouter plus d'une clé valide au fichier ~/.ssh/known_hosts, mais vous devrez le faire manuellement.

Une autre solution pourrait être d'utiliser l'option StrictHostKeyChecking=no pour cet hôte spécifique:

ssh -o StrictHostKeyChecking=no user@host

que vous pourriez mettre dans un alias dans votre fichier ~/.profile ou quelque chose de similaire.

alias hc=ssh -o StrictHostKeyChecking=no user@host

0 votes

StrictHostKeyChecking ne semble pas aider dans ce cas; apparemment il spécifie seulement le comportement lorsque l'hôte n'est pas dans le fichier known_hosts. Mentionné ici: gossamer-threads.com/lists/openssh/dev/45349#45349

0 votes

Cela fonctionne ici. Vous recevrez un avertissement, mais la connexion se poursuit.

0 votes

C'est bizarre. Utilisez-vous l'authentification par mot de passe? Utilisez-vous OpenSSH?

1voto

Aaron Points 132

Si vous ne vous connectez qu'en SSH sur un réseau local alors...

Une solution simple est de supprimer l'ancien fichier de clé et de le remplacer par un fichier vide. Cela vous permettra de réautoriser toutes vos connexions avec de nouvelles clés. Si vous avez des clés ssh stockées pour des sites en dehors de votre réseau local, alors vous devez vous assurer que votre connexion initiale est sûre comme vous l'avez fait la première fois que vous vous êtes connecté à ce serveur.

par exemple

cp known_hosts known_hosts.old
rm known_hosts
nano known_hosts

Ensuite appuyez sur espace, effacer cntl+x et 'y' pour enregistrer le nouveau tampon (fichier). C'est une mauvaise pratique mais correcte tant que vous ne vous connectez pas régulièrement en dehors de votre réseau local (par exemple un serveur universitaire ou de travail)

Sur un réseau local sécurisé, c'est sûr parce que vous ne pouvez tout simplement pas subir d'attaque de l'homme du milieu.

Il vaut toujours mieux utiliser un code que vous comprenez !

5 votes

Effacer l'intégralité du fichier known_hosts à chaque fois va annuler la plupart de la sécurité normalement fournie par ssh.

0 votes

En effet, je soutiendrais qu'au sein d'un réseau interne sécurisé, il est plus sûr de comprendre votre code et contourner la sécurité que de copier du code de manière aveugle. Sur un réseau externe, la situation serait alors différente.

1voto

markgo2k Points 99

Tant de réponses, mais tellement de gens abandonnent la protection en désactivant complètement la vérification stricte de l'hôte, ou en détruisant des informations d'hôte non liées ou en forçant simplement l'utilisateur à accepter les clés de manière interactive, éventuellement à un moment ultérieur, quand cela est inattendu.

Voici une technique simple qui vous permet de laisser la vérification stricte de l'hôte activée, mais de mettre à jour la clé de manière contrôlée, lorsque vous vous y attendez à ce qu'elle change:

  • Supprimez l'ancienne clé et mettez à jour en une seule commande

    ssh-keygen -R server.example.com && \
        ssh -o StrictHostKeyChecking=no server.example.com echo Clé d'hôte SSH mise à jour.
  • Répétez avec les adresses IP ou autres noms d'hôte si vous les utilisez.

L'avantage de cette approche est qu'elle recrée la clé du serveur exactement une fois. La plupart des versions de ssh-keygen semblent ne pas renvoyer d'erreur si le serveur que vous essayez de supprimer n'existe pas dans le fichier known_hosts, si cela pose un problème pour vous, utilisez les deux commandes en séquence.

Cette approche vérifie également la connectivité et émet un message clair pour les journaux dans la commande ssh (qui se connecte, met à jour la clé d'hôte et affiche Clé d'hôte SSH mise à jour puis se termine immédiatement.

Si votre version de ssh-keygen renvoie un code de sortie non nul, et que vous préférez gérer cela sans erreur, quelle que soit la connexion précédente, utilisez simplement les deux commandes en séquence, en ignorant toute erreur sur la commande ssh-keygen.

Si vous utilisez cette technique, vous n'avez jamais besoin de modifier votre commande ssh, ou de désactiver la vérification de l'hôte sauf pendant cette commande ssh spécifique. Vous pouvez être sûr que les futures sessions ssh fonctionneront sans conflit ni besoin d'accepter explicitement une nouvelle clé, tant que la commande ssh ci-dessus s'est exécutée sans erreur.

0 votes

C'était super. merci.

0voto

danone Points 166

Vous devez supprimer l'ancienne clé du serveur client

ssh-keygen -R 192.168.0.25 #1ère suppression sur le serveur client

puis générer à nouveau la clé

ssh -o HostKeyAlias=192.168.0.25 root@192.168.0.25 #sur le serveur client

vérifiez que la nouvelle ligne est là

nano ~/.ssh/known_hosts

-3voto

david Points 9

J'ai eu le même problème.

Tout ce que j'ai fait était sudo nano /home/user/.ssh/ host_allow et j'ai effacé la clé.

Quand je me suis reconnecté au serveur en ssh, il a ajouté une nouvelle clé.

2 votes

Quelques informations supplémentaires sur les raisons de ce phénomène seraient utiles pour répondre.

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