web-dev-qa-db-fra.com

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 le Homme au milieu warning. Cela se produit car une autre empreinte digitale est associée à l'adresse IP de la machine virtuelle.

Dans le fichier .ssh/known_hosts, cependant, je ne trouve pas l'enregistrement lié à l'adresse IP, seulement deux chaînes bizarres ressemblant à 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?

128
Adam Matan
sed -i '6d' ~/.ssh/known_hosts

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

À mon avis, utiliser ssh-keygen -R est une meilleure solution pour un utilisateur averti openssh, alors que votre administrateur Linux habituel ferait mieux de conserver ses compétences sed à jour en utilisant la méthode ci-dessus.

83
mikewaters

La solution la plus simple est:

rm -f .ssh/known_hosts

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

Ou, vous pouvez utiliser:

ssh-keygen -R "hostname"

Ou bien le message "Man-in-the-middle" de ssh doit indiquer quelle ligne du fichier known_hosts contient l'empreinte digitale incriminée. Editez le fichier, passez à cette ligne et supprimez-le.

111
Sean Staats

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

l'homme ssh-keygen lit:

-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).

70
user201564

L'avertissement vous indiquera la ligne exacte dans le fichier hosts 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 la partie /home/user/.ssh/known_hosts:6? Il spécifie le fichier et le numéro de ligne.

18
innaM

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 [email protected]

Pour la facilité d'utilisation, vous pouvez alias ceci:

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

Vous pouvez maintenant mettre en gras chaque fois que vous êtes sûr de faire confiance au certificat du serveur.

8
rouble

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
Tarun Gupta

Vous pouvez également supprimer une seule ligne d'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 ceci sous rmknownhost dans un dossier de votre PATH.

2
grosser

Toutes les réponses sont bonnes, mais pour les vrais professionnels SSH, il nous manque des informations sur la manière de supprimer la signature SSH avec le numéro de port.

Par exemple. vous vous connectez à

ssh some.Host.name -p 222

et vous obtenez un avertissement, et pour le supprimer, vous devez utiliser le numéro de port du colon:

ssh-keygen -R [some.Host.name]:222

J'espère que cela aidera les utilisateurs de configuration non standard.

0
Arunas Bartisius

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

0
stimms

C'est un fichier texte. Vous pouvez facilement éditer avec vi (m) et simplement supprimer la ligne en question (jj) 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
Ryan Griggs