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


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

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

J'ai ouvert le known_hosts fichier, 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.

249
2018-01-10 05:56


origine




Réponses:


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

ssh-keygen -R hostname

424
2018-01-10 07:43



Il fonctionne également avec une adresse IP. Par exemple, j'ai un raccourci hôte DNS pour mon serveur Web. Pour supprimer un conflit entre les clés du nom d'hôte personnalisé et l'adresse IP, j'ai dû supprimer les entrées pour les deux. Donc, ssh-keygen -R xxx.xxx.xxx.xxx. - StrangeElement
Comme @StrangeElement le dit, il est parfois possible de supprimer également l'hôte IP en dehors du nom d'hôte. - Gonzalo Cao
De plus, il conserve une sauvegarde automatiquement (sur ma machine osx: Original contents retained as /Users/nha/.ssh/known_hosts.old, en supposant que c'est la même chose pour Ubuntu). - nha
De plus, si vous utilisez un port ssh non standard, utilisez ce format ssh-keygen -R [ssh.sssshh.com]:1234 - Shiji.Jiang
La meilleure réponse à cette question. Fonctionne comme un charme - bademba


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 le signe deux-points dans le message d'erreur correspond au numéro de ligne. Il s'agit donc de la ligne à supprimer - ligne 1 de votre exemple.


28
2018-01-10 06:00



Je n'avais aucune idée qu'il identifiait le numéro de ligne, ce qui est incroyablement utile. - deltree


Je n'ai que récemment commencé à utiliser les clés de l'hôte, mais quand je les ai gâchées, c'est généralement une clé par ligne. Sauvegardez le fichier et supprimez-le un par un jusqu'à ce que vous trouviez le bon. Puis ajoutez les autres. Un peu long à faire, mais devrait fonctionner.

Toujours sur la base de cette erreur, et sans aucune idée de quoi que ce soit, il pourrait s'agir de la première clé hôte du fichier qui pose problème, ouvrez donc le fichier avec vim

vim ~/.ssh/known_hosts

et frapper

dd

alors enregistrez-le.


18
2018-01-10 06:01



Vous pouvez utiliser: set nu in vim pour afficher les numéros de ligne. La réponse de Takkat est la meilleure de toute façon. - Javier Rivera
Je suis d'accord ne savais pas que tu pouvais faire ça. Je vais l'utiliser dans le futur. J'ai continué à chercher le réglage des numéros de ligne pour vim. Merci. - percent20


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 suis toujours averti 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 comme [1] Bu4Ch@R@4D0M57uFF au lieu d'un nom d'hôte lisible.

Dans ce cas, la seule façon de réussir à supprimer l’hôte incriminé était d’utiliser

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

Pour aller plus loin, 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 sauvegarde avec cette option. extension. Utiliser ssh-keygen le fait automatiquement.

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

3
2018-03-24 22:24



Ce n'est pas correct ssh-keygen -R {hostname} fonctionnera, même lorsque les noms d'hôte sont "cachés" (hachés). Pourtant, oui, on peut supprimer l'entrée par numéro (par exemple, 10ème entrée via sed -i.bak 10d ~/.ssh/known_hosts), mais ce n'est généralement pas nécessaire. Il se peut qu'un port non standard ait été utilisé, auquel cas vous devrez peut-être formater la commande en tant que (guillemets): ssh-keygen -R '[hostname]:2222' - michael
Bon à savoir @michael_n, il est très probable que ce soit un port non standard qui affectait ma capacité à supprimer l'entrée. Je dois également noter que si vous avez accepté plusieurs empreintes digitales pour un hôte, je ne suis pas sûr que cela supprime TOUTES les entrées à la fois, ou juste une à la fois. - 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 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. D'ici: Comment réparer la clé incriminée dans le fichier ssh known_hosts

J'ai eu un peu de magie cli

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 fonctionnera pas.


1
2018-02-20 00:37





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


0
2018-02-20 01:32



Les adresses IP et les noms d'hôte ne sont plus stockés textuellement (texte en clair) dans le fichier hôte connu, donc cela ne fonctionnera pas. On devrait soit utiliser ssh-keygen -R ... (de préférence); ou, sed avec le numéro de ligne spécifique à supprimer. Aussi pour sed en place, utilisation -i' option; e.g., sed -i.bak 10d ~ / .ssh / known_hosts` pour supprimer la 10ème ligne et (éventuellement) conserver l’original dans un fichier de sauvegarde suffixé par .bak. - michael