Est-il possible de supprimer une clé d'hôte particulière du fichier known_hosts de SSH?

241

Est-il possible de supprimer une clé d’hôte particulière du fichier known_hosts de SSH?

Je finis généralement par supprimer l'intégralité du fichier known_hosts , ce que je n'ai aucun problème à faire, mais par curiosité, est-il possible de supprimer une seule entrée?

J'ai ouvert le fichier known_hosts , mais j'ai du mal à comprendre son contenu.

Voici le message auquel j'ai fait face, ce qui m'a amené à poser cette question:

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.
    
posée theTuxRacer 10.01.2011 - 06:56
la source

6 réponses

413

Utilisez cette commande pour supprimer les entrées de known_hosts:

ssh-keygen -R hostname
    
réponse donnée Takkat 10.01.2011 - 08:43
la source
27

Oui, vous ne pouvez supprimer qu’une seule clé. Ouvrez-le simplement dans un éditeur et supprimez la ligne incriminée. Le numéro après les deux-points dans le message d'erreur est le numéro de ligne, de sorte que la ligne à supprimer - la ligne 1 de votre exemple.

    
réponse donnée Mike Scott 10.01.2011 - 07:00
la source
17

Je n’ai que récemment commencé à utiliser les clés d’hôte, mais quand je les ai gâchées, il s’agit généralement d’une clé par ligne. Puis ajoutez les autres. Un peu long à faire, mais devrait fonctionner.

Également sur la base de cette erreur, et sans aucune idée de quoi que ce soit, cela pourrait être la première clé du fichier dans le fichier qui pose problème. Ouvrez le fichier avec vim

vim ~/.ssh/known_hosts

et appuyez sur

dd

alors enregistrez-le.

    
réponse donnée percent20 10.01.2011 - 07:01
la source
2

L'utilisation du nom d'hôte ssh-keygen -R ne fonctionnera pas toujours. Si vous avez une version plus récente de SSH qui "cache" les noms d'hôtes pour empêcher le piratage de ssh-agent, il semble que ssh-keygen ne parvienne pas à libérer le nom d'hôte.

Par exemple, j'ai un hôte appelé build-node-01 et je me suis connecté et j'ai accepté la clé. Je le reconstruis alors à partir de zéro, obtenant une nouvelle empreinte hôte et j'essaie de me reconnecter, j'aurai un avertissement qu'il y a un conflit sur la ligne X (disons 3). Je cours ssh-keygen -R hostname , mais la prochaine fois que j'essaie de me connecter, je reçois toujours un avertissement qu'il y a un conflit. J'ai examiné le fichier uniquement pour découvrir que le nom d'hôte était haché et apparaissait sous la forme [1] [email protected]@4D0M57uFF au lieu d'un nom d'hôte lisible.

Dans ce cas, le seul moyen de réussir à supprimer l’hôte incriminé était d’utiliser

sed -i 'xd' ~/.ssh/known_hosts

Pour aller plus loin dans cette démarche, vous pouvez faire une sauvegarde des connus_hosts au cas où vous supprimeriez la mauvaise ligne. Dans ce cas, ajoutez simplement un fichier .bak (ou une extension) à l’option -i pour créer une ligne. sauvegarde avec cette extension. Utiliser ssh-keygen le fait automatiquement.

sed -i.bak 'xd' ~/.ssh/known_hosts
    
réponse donnée dragon788 24.03.2015 - 23:24
la source
1

Juste pour partager une autre réponse claire et facile que je viens de trouver. La suppression du nom d'hôte est pour moi, car le fichier known_hosts est haché. Cependant, je pourrais modifier manuellement l'entrée hôte en fonction du numéro de ligne dans le message d'erreur. Comme l’a noté Mike Scott précédemment, le numéro de ligne du nom d’hôte en question se trouve dans le message d’erreur.

Ou je peux le faire. À partir de là: comment réparer la clé incriminée dans le fichier ssh known_hosts

J'ai un peu de magie cli

sed -i 'xd' ~/.ssh/known_hosts

Remplacez le x par le numéro de la ligne et le tour est joué. Il offre également une réponse perl si le sed ne fonctionnera pas.

    
réponse donnée Corvus B 20.02.2014 - 01:37
la source
0
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

Dans ce cas, 10.20.120.211 est l'hôte que je veux supprimer de mon fichier known_hosts, assurez-vous d'échapper aux caractères spéciaux tels que (.)

    
réponse donnée Shan Valleru 20.02.2014 - 02:32
la source

Lire d'autres questions sur les étiquettes