Ist es möglich, einen bestimmten Hostschlüssel aus der Datei known_hosts von SSH zu entfernen?
Ich lösche in der Regel die gesamte known_hosts
Datei. Ich habe keine Probleme damit, aber kann ich aus Neugier nur einen einzigen Eintrag entfernen?
Ich habe die known_hosts
Datei geöffnet , aber ich habe Mühe, den Inhalt zu verstehen.
Unten ist die Nachricht, mit der ich konfrontiert wurde und die mich dazu veranlasste, diese Frage zu stellen:
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.
Original contents retained as /Users/nha/.ssh/known_hosts.old
vorausgesetzt, es ist dasselbe für Ubuntu).ssh-keygen -R [ssh.sssshh.com]:1234
Ja, Sie können nur einen Schlüssel entfernen. Öffnen Sie es einfach in einem Editor und löschen Sie die betreffende Zeile. Die Nummer nach dem Doppelpunkt in der Fehlermeldung ist die Zeilennummer, das ist also die zu löschende Zeile - Zeile 1 in Ihrem Beispiel.
quelle
Ich habe erst kürzlich angefangen, Host-Schlüssel zu verwenden, aber wenn ich mit ihnen rumgespielt habe, ist es im Allgemeinen ein Schlüssel pro Zeile, also sichern Sie die Datei und entfernen Sie sie nacheinander, bis Sie den richtigen finden. Fügen Sie dann die anderen wieder hinzu. Das ist ein langer Weg, sollte aber funktionieren.
Basierend auf diesem Fehler und ohne eine Ahnung zu haben, könnte dies der erste Hostschlüssel in der Datei sein, der das Problem darstellt. Öffnen Sie die Datei also mit vim
vim ~/.ssh/known_hosts
und schlagen
dd
dann speichere es.
quelle
Die Verwendung von ssh-keygen -R hostname funktioniert nicht immer. Wenn Sie eine neuere Version von SSH haben, die die Hostnamen "versteckt", um die Entführung von ssh-agent zu verhindern, kann ssh-keygen den Hostnamen anscheinend nicht enthüllen.
Zum Beispiel habe ich einen Host mit dem Namen build-node-01 und habe eine Verbindung dazu hergestellt und den Schlüssel akzeptiert. Ich erstelle es dann von Grund auf neu, erhalte einen neuen Host-Fingerabdruck und versuche erneut, eine Verbindung herzustellen. Ich erhalte eine Warnung, dass in Zeile X ein Konflikt vorliegt (z. B. 3). Ich renne
ssh-keygen -R hostname
, aber wenn ich das nächste Mal versuche, eine Verbindung herzustellen, wird trotzdem eine Warnung angezeigt, dass ein Konflikt vorliegt. Ich habe die Datei nur untersucht, um festzustellen, dass der Hostname gehasht und[1] Bu4Ch@R@4D0M57uFF
anstelle eines lesbaren Hostnamens angezeigt wurde.In diesem Fall war die einzige Möglichkeit, den fehlerhaften Host erfolgreich zu entfernen, die Verwendung
Um noch einen Schritt weiter zu gehen, möchten Sie möglicherweise eine Sicherungskopie der known_hosts erstellen, falls Sie die falsche Zeile löschen. Fügen Sie in diesem Fall der Option -i einfach eine .bak-Datei (oder eine beliebige Erweiterung) hinzu, um eine Sicherungskopie zu erstellen Erweiterung. Mit ssh-keygen wird dies automatisch durchgeführt.
quelle
ssh-keygen -R {hostname}
wird funktionieren, auch wenn Hostnamen 'versteckt' (gehasht) sind. Trotzdem kann man den Eintrag nach Nummer löschen (z. B. 10. Eintrag übersed -i.bak 10d ~/.ssh/known_hosts
), aber das ist normalerweise nicht erforderlich. Möglicherweise wurde ein nicht standardmäßiger Port verwendet. In diesem Fall müssen Sie den Befehl möglicherweise wiessh-keygen -R '[hostname]:2222'
Nur um eine andere saubere und einfache Antwort zu teilen, die ich gerade gefunden habe. Das Entfernen des Hostnamens ist für mich nicht möglich, da die Datei known_hosts gehasht wird. Ich konnte jedoch den Host-Eintrag basierend auf der Zeilennummer in der Fehlermeldung manuell bearbeiten. Wie bereits von Mike Scott festgestellt, ist die Zeilennummer des Hostnamens in der Fehlermeldung enthalten.
Oder ich kann das tun. Von hier aus: wie man einen fehlerhaften Schlüssel in der Datei ssh known_hosts repariert
Ich habe dieses bisschen Cli-Magie
Ersetzen Sie das x durch die Zeilennummer und voila. Er bietet auch eine Perl-Antwort an, wenn der sed nicht funktioniert.
quelle
In diesem Fall ist 10.20.120.211 der Host, den ich aus meiner known_hosts-Datei löschen möchte. Stellen Sie sicher, dass Sie die Sonderzeichen wie (.) Maskieren.
quelle
ssh-keygen -R ...
(vorzugsweise) verwenden; odersed
mit der zu löschenden Zeilennummer. Auch, umsed
an Ort und Stelle, verwenden-i' option; e.g.,
sed -i.bak 10d ~ / .ssh / known_hosts` der 10. Zeile zu löschen, und (optional) halten das Original in einer Sicherungsdatei angehängt durch.bak
.Sie können das Entfernen des bestimmten Hosts vermeiden, indem Sie ihn aktualisieren:
Auf diese Weise müssen Sie sich nicht erneut mit dem Host verbinden.
quelle