it-swarm.com.de

Ist es möglich, einen bestimmten Hostschlüssel aus der Datei known_hosts von SSH zu entfernen?

Ist es möglich, einen bestimmten Hostschlüssel aus der Datei known_hosts von SSH zu entfernen?

Normalerweise lösche ich die gesamte known_hosts -Datei. Ich habe keine Probleme damit, aber ist es aus Neugier möglich, nur einen einzigen Eintrag zu entfernen?

Ich habe die Datei known_hosts geöffnet, aber ich habe Mühe, deren 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.
303
theTuxRacer

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

ssh-keygen -R hostname
506
Takkat

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.

32
Mike Scott

Ich habe erst vor kurzem begonnen, 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 Ahnung, was auch immer, könnte es der erste Host-Schlü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.

19
Buddy Lindsey

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 starte 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 untersuchte die Datei nur, um festzustellen, dass der Hostname gehasht und als [1] [email protected]@4D0M57uFF anstelle eines lesbaren Hostnamens angezeigt wurde.

In diesem Fall war die einzige Möglichkeit, den fehlerhaften Host erfolgreich zu entfernen, die Verwendung von

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

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.

sed -i.bak 'xd' ~/.ssh/known_hosts
3
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 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 behebt

Ich habe dieses bisschen Cli-Magie

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

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

1
Corvus B
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 known_hosts-Datei löschen möchte. Stellen Sie sicher, dass Sie Sonderzeichen wie (.) Ignorieren.

0
Shan Valleru

Sie können das Entfernen des bestimmten Hosts vermeiden, indem Sie ihn aktualisieren:

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

Auf diese Weise müssen Sie sich nicht erneut mit dem Host verbinden.

0
Pablo Bianchi