2009-08-26 16:00:30 +0000 2009-08-26 16:00:30 +0000
140
140

Remove key from known_hosts

J'ai construit plusieurs machines virtuelles au cours des dernières semaines. Le problème, c'est que le .ssh/known_hosts me donne l'avertissement Man in the middle . Cela se produit parce qu'une autre empreinte digitale est associée à l'IP de la machine virtuelle.

Dans le fichier .ssh/known_hosts, cependant, je ne trouve pas l'enregistrement relatif à l'IP, seulement deux chaînes bizarres, semblables à des clés et “ssh-rsa”.

Quelqu'un a-t-il une idée sur la façon de supprimer l'ancienne clé de known_hosts ?

Réponses (11)

139
139
139
2009-08-26 16:11:22 +0000

La solution la plus simple est la suivante :

rm -f .ssh/known_hosts

ssh recréera le fichier à nouveau, mais vous perdrez la vérification des clés des autres hôtes ! Ou vous pouvez utiliser :

ssh-keygen -R "hostname"

Ou le message ssh “man-in-the-middle” doit indiquer quelle ligne du fichier connu de l'hôte a l'empreinte digitale incriminée. Modifiez le fichier, passez à cette ligne et supprimez-le.

91
91
91
2010-07-02 17:56:38 +0000
sed -i '6d' ~/.ssh/known_hosts

Modifiera le fichier ~/.ssh/known_hosts:6 en supprimant la 6ème ligne.

A mon avis, l'utilisation de ssh-keygen -R est une meilleure solution pour un utilisateur d'openssh power, alors que votre administrateur Linux habituel ferait mieux de maintenir ses compétences en matière de sed en utilisant la méthode ci-dessus.

89
89
89
2013-02-22 18:41:50 +0000

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

man ssh-keygen lit :

-R hostname

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

18
18
18
2009-08-26 16:17:33 +0000

L'avertissement vous indiquera la ligne exacte dans le fichier des hôtes connus.

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 la partie /home/user/.ssh/known_hosts:6 ? Elle précise le numéro de fichier et de ligne.

11
11
11
2016-05-28 09:28:08 +0000

Vous devez exécuter la commande suivante pour vous débarrasser de 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
8
8
8
2014-03-12 16:05:22 +0000

Vous pouvez également demander à ssh de ne pas vérifier le fichier known_hosts en utilisant les drapeaux UserKnownHostsFile et StrictHostKeyChecking.

Par exemple :

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

Pour faciliter l'utilisation, vous pouvez utiliser l'alias suivant :

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

Maintenant, vous pouvez simplement mettre en gras lorsque vous êtes sûr de faire confiance au certificat du serveur.

4
4
4
2018-05-16 08:03:38 +0000

Toutes les réponses sont bonnes, mais pour les vrais pros de SSH, il nous manque des informations sur la façon de supprimer la signature ssh avec le numéro de port.

  • Commande de suppression de la signature d'hôte SSH simple :

  • Suppression de la clé ssh complexe, par exemple vous vous connectez à ssh sur le port 222 non standard :

et vous recevez un avertissement, et pour supprimer cela, vous devez utiliser les crochets deux-points numéro de port :

ssh-keygen -R [example.com]:222

Espérons que cela aidera les utilisateurs de configuration non standard.

1
1
1
2019-10-09 16:59:56 +0000

Voici une méthode utilisant l'éditeur Ex :

ex +6d -scwq ~/.ssh/known_hosts

où le 6ème est votre numéro de ligne mentionné dans le message d'avertissement. Comme celui-ci :

Clé d'IP offensante dans /home/user/. ssh/known_hosts:6 <=== LINE NUMBER


En général, il est conseillé d'utiliser ex pour éditer les fichiers de manière non interactive , au lieu de sed, qui est plus un itor S tream ED et son paramètre -i qui est une extension FreeBSD non standard.

0
0
0
2010-06-22 16:32:09 +0000

Vous pouvez également supprimer une seule ligne des hôtes connus avec, par exemple, 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 * ""}

Enregistrez cette ligne sous le nom de rmknownhost dans un dossier de votre PATH.

0
0
0
2009-08-26 16:13:25 +0000

Le nom de l'hôte ou 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
0
0
2014-06-27 13:23:54 +0000

Il s'agit d'un fichier texte. Vous pouvez facilement l'éditer avec vi(m) et il suffit de supprimer la ligne en question (dd), et de 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.