web-dev-qa-db-fra.com

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

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

Je finis généralement par supprimer le fichier entier known_hosts, ce qui ne me pose pas de problème, mais juste 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.

Ci-dessous, le message auquel j'ai été confronté, 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.
291
theTuxRacer

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

ssh-keygen -R hostname
486
Takkat

Oui, vous pouvez supprimer 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 la ligne, c'est donc la ligne à supprimer - la ligne 1 de votre exemple.

31
Mike Scott

Ce n'est que récemment que j'ai commencé à utiliser les clés de l'hôte, mais lorsque je les ai manipulées, il s'agit généralement d'une clé par ligne. Sauvegardez le fichier et supprimez-le un à la fois jusqu'à ce que vous trouviez la bonne. Ajoutez ensuite les autres. Un peu long chemin à faire, mais devrait fonctionner.

Également basé sur cette erreur, et sans aucune idée de ce qui se passe, il pourrait s'agir de la première clé d'hôte du fichier à l'origine du problème. Ouvrez-le avec vim.

vim ~/.ssh/known_hosts

et frapper

ddname__

puis enregistrez-le.

19
percent20

L'utilisation de ssh-keygen -R nom_hôte ne fonctionnera pas toujours. Si vous avez une version plus récente de SSH qui "masque" les noms d’hôte pour empêcher le détournement de ssh-agent, apparemment, ssh-keygen est incapable de libérer le nom d’hôte.

Par exemple, j'ai un hôte appelé build-node-01 auquel je me suis connecté et que j'ai accepté la clé. Je le reconstruis ensuite à partir de zéro, obtenant une nouvelle empreinte digitale de l'hôte et j'essaie de me reconnecter. Je reçois un avertissement qu'il y a un conflit sur la ligne X (disons 3). Je lance 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 qu'il apparaissait sous la forme [1] Bu4Ch@R@4D0M57uFF au lieu d'un nom d'hôte lisible.

Dans ce cas, le seul moyen de supprimer correctement l’hôte fautif était d’utiliser

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

Pour aller un peu plus loin dans cette tâche, vous voudrez peut-être effectuer une sauvegarde de l’hôte known_hosts au cas où vous supprimeriez la mauvaise ligne. Dans ce cas, il suffit d’ajouter un fichier .bak (ou toute extension) à l’option -i pour créer une sauvegarde avec celle-ci. extension. Utiliser ssh-keygen fait cela automatiquement.

sed -i.bak 'xd' ~/.ssh/known_hosts
3
dragon788

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 éditer manuellement l'entrée de l'hôte en fonction du numéro de ligne indiqué dans le message d'erreur. Comme l'a noté précédemment Mike Scott, le numéro de ligne du nom d'hôte incriminé 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 eu ce brin de magie

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

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

1
Corvus B
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 (.)

0
Shan Valleru

Vous pouvez éviter de supprimer l'hôte particulier en le mettant à jour:

ssh-keyscan -t ecdsa hostname >> ~/.ssh/known_hosts

De cette façon, vous ne devez plus vous connecter à l'hôte.

0
Pablo Bianchi