Frage Ist es möglich, einen bestimmten Host-Schlüssel aus der SSH-Datei known_hosts zu entfernen?


Ist es möglich, einen bestimmten Host-Schlüssel aus der SSH-Datei known_hosts zu entfernen?

Normalerweise lösche ich das Ganze known_hosts Datei, mit der ich keine Probleme habe, aber nur aus Neugier, ist es möglich, nur einen einzigen Eintrag zu entfernen?

Ich öffnete die known_hosts Datei, aber ich habe Mühe, den Inhalt zu verstehen.

Unten ist die Nachricht, die ich sah, die mich dazu brachte, 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.

249
2018-01-10 05:56


Ursprung




Antworten:


Verwenden Sie diesen Befehl, um Einträge aus known_hosts zu entfernen:

ssh-keygen -R hostname

424
2018-01-10 07:43



Es funktioniert auch mit einer IP-Adresse. Zum Beispiel habe ich eine DNS-Host-Verknüpfung für meinen Webserver. Um einen Konflikt zwischen den Schlüsseln für den benutzerdefinierten Hostnamen und die IP-Adresse zu entfernen, musste ich die Einträge für beide entfernen.So ssh-keygen -R xxx.xxx.xxx.xxx. - StrangeElement
Wie @StrangeElement sagt, ist es manchmal möglich, dass Sie neben dem Hostnamen auch den IP-Host entfernen müssen. - Gonzalo Cao
Außerdem wird automatisch ein Backup erstellt (auf meinem osx-Rechner: Original contents retained as /Users/nha/.ssh/known_hosts.old, vorausgesetzt, es ist das gleiche für Ubuntu). - nha
Verwenden Sie dieses Format außerdem, wenn Sie nicht standardmäßigen SSH-Anschluss verwenden ssh-keygen -R [ssh.sssshh.com]:1234 - Shiji.Jiang
Die beste Antwort für diese Frage. Klappt wunderbar - bademba


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.


28
2018-01-10 06:00



Ich hatte keine Ahnung, dass die Zeilennummer identifiziert wurde, das ist unglaublich hilfreich. - deltree


Ich habe erst vor kurzem begonnen, Host-Schlüssel zu verwenden, aber wenn ich mit ihnen versaut habe, ist es in der Regel ein Schlüssel pro Zeile, so sichern Sie die Datei und entfernen Sie sie nacheinander, bis Sie die richtige gefunden haben. Dann füge die anderen zurück. Es ist ein langer Weg, aber es sollte funktionieren.

Auch basierend auf diesem Fehler, und ohne Ahnung, was auch immer, könnte es der erste Host-Schlüssel in der Datei sein, der das Problem ist, also öffne die Datei mit vim

vim ~/.ssh/known_hosts

und hit

dd

dann speichern Sie es.


18
2018-01-10 06:01



Sie können Folgendes verwenden: Legen Sie in vim nu fest, um die Zeilennummern anzuzeigen. Takkat Antwort ist sowieso die beste. - Javier Rivera
Ich stimme zu, wusste nicht, dass Sie das tun könnten. Ich werde es in Zukunft verwenden. Ich hielt es für sinnvoll, die Zeilennummern nach vim zu suchen. Vielen Dank. - percent20


Die Verwendung von ssh-keygen -R Hostname wird nicht immer funktionieren. Wenn Sie eine neuere Version von SSH haben, die die Hostnamen "versteckt", um ssh-agent-Hijacking zu verhindern, kann ssh-keygen anscheinend den Hostnamen nicht auflösen.

Zum Beispiel habe ich einen Host namens build-node-01, mit dem ich verbunden bin und den Schlüssel akzeptiert habe. Ich erstelle es dann von Grund auf neu, erhalte einen neuen Host-Fingerabdruck und versuche, mich erneut zu verbinden. Ich werde eine Warnung erhalten, dass in Zeile X ein Konflikt vorliegt (etwa 3). ich renne ssh-keygen -R hostname, aber das nächste Mal, wenn ich versuche mich zu verbinden, bekomme ich immer noch eine Warnung, dass es einen Konflikt gibt. Ich habe die Datei nur untersucht, um herauszufinden, dass der Hostname gehashed wurde und als angezeigt wurde [1] Bu4Ch@R@4D0M57uFF anstelle eines lesbaren Hostnamens.

In diesem Fall war es die einzige Möglichkeit, den fehlgeschlagenen Host erfolgreich zu entfernen

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

Um diesen sed einen Schritt weiter zu bringen, möchten Sie vielleicht eine Sicherungskopie der known_hosts erstellen, falls Sie die falsche Zeile löschen. Fügen Sie in diesem Fall einfach eine .bak (oder eine Erweiterung) zur Option -i hinzu, um damit eine Sicherungskopie zu erstellen Erweiterung. Die Verwendung von ssh-keygen macht dies automatisch.

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

3
2018-03-24 22:24



Das ist nicht richtig. ssh-keygen -R {hostname} funktioniert auch dann, wenn Hostnamen "versteckt" (Hashed) sind. Trotzdem, ja, man kann den Eintrag nach Nummer löschen (z. B. den 10. Eintrag über sed -i.bak 10d ~/.ssh/known_hosts), aber das ist normalerweise nicht notwendig. Es könnte sein, dass ein nicht standardmäßiger Port verwendet wurde. In diesem Fall müssen Sie den Befehl möglicherweise als (Anführungszeichen beachten) formatieren: ssh-keygen -R '[hostname]:2222' - michael
Gut zu wissen @michael_n, es ist sehr wahrscheinlich, dass es ein Nicht-Standard-Port war, der meine Fähigkeit beeinflusste, den Eintrag zu entfernen. Ich sollte auch beachten, dass wenn Sie mehrere Fingerabdrücke für einen Host akzeptiert haben, ich bin mir nicht sicher, ob es alle Einträge auf einmal entfernt, oder nur eins nach dem anderen. - dragon788


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 gehashed wird. Jedoch konnte ich den Host-Eintrag basierend auf der Zeilennummer in der Fehlermeldung manuell bearbeiten. Wie zuvor von Mike Scott angemerkt, befindet sich die Zeile mit der Zeile mit dem Hostnamen in der Fehlermeldung.

Oder ich kann das tun. Von hier: wie man einen fehlerhaften Schlüssel in der ssh known_hosts Datei repariert

Ich habe ein bisschen Cli-Magie

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

Ersetzen Sie das x durch die Zeilennummer und voila. Er bietet auch eine Perl-Antwort, wenn das Sed nicht funktioniert.


1
2018-02-20 00:37





sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

In diesem Fall ist 10.20.120.211 der Host, den ich aus meiner Datei "known_hosts" löschen möchte. Achten Sie darauf, dass Sie die Sonderzeichen wie (.)


0
2018-02-20 01:32



IP-Adressen und Hostnamen werden nicht mehr wörtlich (Klartext) in der bekannten hosts-Datei gespeichert, so dass dies nicht funktioniert. Man sollte entweder benutzen ssh-keygen -R ... (vorzugsweise); oder, sed mit der spezifischen zu löschenden Zeilennummer. Auch zu sed in-place, verwenden -i' option; e.g., sed -i.bak 10d ~ / .ssh / known_hosts ', um die 10. Zeile zu löschen und (optional) das Original in einer Backup-Datei zu speichern, die mit .bak. - michael