Question Supprimer la clé de known_hosts


J'ai construit plusieurs machines virtuelles au cours des dernières semaines. Le problème est que le .ssh/known_hosts me donne la L'homme au milieu Attention. Cela se produit car une autre empreinte est associée à l'adresse IP de la machine virtuelle.

dans le .ssh/known_hosts fichier, cependant, je ne trouve pas l'enregistrement lié à l'IP, seulement deux chaînes de caractères bizarres, "ssh-rsa".

Quelqu'un at-il des idées sur la façon de supprimer l'ancienne clé de known_hosts?


110
2017-08-26 16:00


origine


Les "chaînes de caractères bizarres" dont vous parlez sont les adresses hôtes / ip hachées. Cette fonction de sécurité aide à empêcher un intrus de savoir à quels systèmes vous avez accès. Si vous voyez ceci alors votre ssh_config a HashKnownHosts yes ensemble. - Deebster
Si vous pensez que le contenu du fichier est trop compliqué, vous avez probablement activé le retour à la ligne. Désactivez le. Toutes les lignes commencent par un nom d'hôte ou une adresse IP. - Daniel B


Réponses:


sed -i '6d' ~/.ssh/known_hosts

Va modifier le fichier ~ / .ssh / known_hosts: 6, en supprimant la 6ème ligne.

A mon avis, en utilisant ssh-keygen -R est une meilleure solution pour un utilisateur opensh, alors que votre administrateur Linux fait de son mieux pour conserver ses compétences sed en utilisant la méthode ci-dessus.


76
2017-07-02 17:56



Je ne pense pas que ce soit un bon conseil pour éditer un fichier de configuration manuellement si vous avez une application officielle pour cela. Prendre des risques ne fait pas de vous un pro, trouver l'option la plus rapide et la plus sûre. C'est comme dire aux gens d'aller de l'avant et de modifier /etc/sudoerssans pour autant visudo. Si vous voulez aiguiser votre sed compétences, allez-y et faites-le sans gâcher votre système. - kraxor
"si vous avez une demande officielle pour cela" => les deux ssh-keygen -R et sed -i {line}d sont assez "officiels", et les deux vont travailler dans un avenir prévisible. Util ssh-keygen permet la suppression par numéro de ligne, les deux sont parfaitement acceptables (car les numéros de ligne sont souvent plus faciles à gérer et moins sujets aux erreurs que les noms d'hôte modernes du centre de données). - michael
A) La suppression spécifique de la 6ème ligne, tout cela est très "sans mains". Aucune explication du tout sur la signification de la 6ème ligne du fichier?! B) aussi man ssh-keygen mentionne ssh-keygen -R hostname  tu viens de dire ssh-keygen -R sans nom d'hôte spécifié, et vous n'avez pas expliqué ce que vous entendez par là. - barlop


La solution la plus simple est la suivante:

rm -f .ssh/known_hosts

ssh recréer le fichier à nouveau, mais vous perdez la vérification des clés pour les autres hôtes!

Ou, vous pouvez utiliser:

ssh-keygen -R "hostname"

Ou le message ssh "man-in-the-middle" devrait indiquer quelle ligne du fichier known_hosts a l'empreinte digitale incriminée. Modifiez le fichier, accédez directement à cette ligne et supprimez-le.


89
2017-08-26 16:11



ssh-keygen -R hostname va travailler aussi. - grawity
Si nous supprimons ce fichier, d'autres clés seront également supprimées. - shgnInc
Supprimer le fichier est un mauvais conseil, c'est comme dire à quelqu'un d'acheter un nouveau PC car l'ancien a une souris cassée. Modifier manuellement un fichier pouvant être modifié par une application officielle est également une mauvaise idée. le ssh-keygen L'option a été ajoutée en raison d'un commentaire, mais sans aucune explication. Je ne pense pas que cette réponse mérite autant de commentaires. - kraxor
-1 à cause de l'ensemble "supprimer tout le fichier known_hosts" premières lignes. C'est une chose terrible, terrible, terrible à proposer et qui devrait être supprimée. - Olivier Dulac
Cette solution est exagérée. Il suffit de supprimer la ligne incriminée. C'est tout. - Blake Frederick


Il y a un commutateur ssh-keygen (-R) pour cela.

l'homme ssh-keygen lit:

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


54
2018-02-22 18:41



C'est la méthode la plus simple et la plus sûre. - Leo
Remarque: Cela changera les autorisations du fichier known_hosts à 0600. Si vous avez un fichier known_hosts partagé pour une raison quelconque, cela pourrait désactiver son partage. - Jiri Klouda


L'avertissement vous indiquera la ligne exacte dans le fichier d'hôtes connu.

Voici un exemple:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Voir le /home/user/.ssh/known_hosts:6 partie? Il spécifie le fichier et le numéro de ligne.


15
2017-08-26 16:17





Vous pouvez également demander à ssh de ne pas vérifier le fichier known_hosts à l'aide des indicateurs UserKnownHostsFile et StrictHostKeyChecking.

Par exemple:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Pour plus de facilité, vous pouvez utiliser ceci:

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Maintenant, vous pouvez simplement mettre en gras chaque fois que vous êtes sûr que vous faites confiance au certificat du serveur.


8
2018-03-12 16:05



Quelle idée horrible. Désactivez définitivement une couche de sécurité simplement parce que vous êtes trop paresseux pour garder votre ~/.ssh/known_hosts à jour? Pourquoi ne pas aller de l'avant et utiliser telnet? "chaque fois que vous êtes sûr" - si vous en êtes sûr, alors vous n'avez aucune idée de ce qu'est une attaque MITM et vous devriez probablement passer du temps à lire de la bonne littérature. - kraxor
Sur la base de la question du PO, je pense que c'est une réponse valable. Vous avez parfois un système de test sur lequel vous créez / détruisez beaucoup de machines virtuelles. (Je le fais maintenant que je prépare mon examen RHCE). Il n’ya peut-être pas d’impact sur la sécurité. Tout en notant que les implications en matière de sécurité sont grandes, je ne pense pas que cela doive être qualifié d’idée «horrible». - Rick Chatham
en relation: superuser.com/a/1126243/73961 - michael


Vous devez exécuter la commande suivante pour résoudre ce problème. Ouvrez le terminal et tapez la commande suivante:

Pour tous les exemples ci-dessous, remplacez simplement la valeur après -R

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com

4
2018-05-28 09:28



Cette méthode a déjà été suggérée dans les réponses précédentes. Pourriez-vous développer ce qui est différent dans votre réponse? - Burgi
@Burgi - cette réponse donne plus de détails sur la syntaxe de ssh-keygen -R que toute autre réponse à ce jour. Il montre par exemple exactement ce que vous pouvez écrire après -R. Donc, cette réponse vaut la peine, même si ce n’est pas une réponse totalement nouvelle. - Yitz
@Yitz Mon commentaire a été fait dans le cadre de la révision. À l'époque (il y a 18 mois), je pensais que la question avait besoin d'un peu d'aide pour la rendre encore meilleure. - Burgi


Vous pouvez également supprimer une seule ligne à partir d'hôtes connus, par ex. rmknownhost 111 (111 est la ligne à supprimer):

#! /usr/bin/env ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

Enregistrer ceci comme rmknownhost dans un dossier de votre PATH.


2
2018-06-22 16:32



Quel est l'avantage de le faire dans n'importe quel éditeur de texte? Y a-t-il une raison de ne pas le faire de cette façon, comme comment éditer sudoers avec visudo? - Andy Lester
Quelles distributions viennent avec ça? Ubuntu ne semble pas l'avoir. - flickerfly
L'avantage est qu'il est automatisé et rapide / c'est un binaire séparé que vous ajoutez vous-même - grosser
Vous auriez pu simplement poster votre script ici au lieu de lier votre propre entrée de blog que vous avez créée le jour où vous avez posté cette réponse. Cela qualifie comme spam IMHO. Sans parler du fait que vous pourriez créer un alias simple pour obtenir le même résultat, pas besoin d'un script de rubis de 7 lignes. - kraxor


L'entrée du nom d'hôte ou de l'adresse IP doit figurer dans la première colonne. L'avertissement doit également indiquer un numéro de ligne où se trouve la clé incriminée.


0
2017-08-26 16:13





C'est un fichier texte. Vous pouvez facilement éditer avec vi (m) et simplement supprimer la ligne en question (dd) et sauvegarder le fichier (wq). Mais s'il existe une commande spécifique pour supprimer un hôte, c'est probablement la méthode la plus sûre.


0
2018-06-27 13:23



Je ne vois pas comment éditer le fichier directement dans VIM est "dangereux". C'est basé sur votre niveau de confort avec VIM. Surtout avec ce fichier, le plus grand risque que vous avez est de supprimer trop de clés, auquel cas vous serez simplement invité à nouveau. - Rick Chatham
La "sécurité" dont je parlais implique 1) d'oublier / de ne pas savoir supprimer les informations dépendantes dans d'autres fichiers (le cas échéant) et 2) de supprimer accidentellement plus ou moins que nécessaire, brisant ainsi le fichier. - Ryan Griggs