2009-08-26 16:00:30 +0000 2009-08-26 16:00:30 +0000
140
140

Schlüssel von known_hosts

entfernen Ich habe in den letzten Wochen mehrere virtuelle Maschinen erstellt. Das Problem ist, dass die .ssh/known_hosts mir die Warnung Mann in der Mitte gibt. Dies geschieht, weil ein weiterer Fingerabdruck mit der IP der virtuellen Maschine verknüpft ist.

In der Datei .ssh/known_hosts finde ich jedoch nicht den mit der IP verknüpften Datensatz, sondern nur zwei bizarre, schlüsselähnliche Zeichenfolgen und “ssh-rsa”.

Hat jemand eine Idee, wie man den alten Schlüssel aus known_hosts entfernen kann?

回答 (11)

139
139
139
2009-08-26 16:11:22 +0000

Die einfachste Lösung ist:

rm -f .ssh/known_hosts

ssh wird die Datei erneut erzeugen, aber Sie verlieren die Schlüsselprüfung für andere Hosts!

Oder, Sie können verwenden:

ssh-keygen -R "hostname"

Oder die ssh “man-in-the-middle”-Meldung sollte anzeigen, welche Zeile der Datei known_hosts den beanstandeten Fingerabdruck hat. Bearbeiten Sie die Datei, springen Sie zu dieser Zeile und löschen Sie sie.

91
91
91
2010-07-02 17:56:38 +0000
sed -i '6d' ~/.ssh/known_hosts

wird die Datei ~/.ssh/known_hosts:6 modifizieren und die 6. Zeile entfernen

Meiner Meinung nach ist die Verwendung von ssh-keygen -R eine bessere Lösung für einen openssh-Poweruser, während Ihr regulärer Linux-Administrator besser daran täte, seine sed-Fähigkeiten mit der obigen Methode aufzufrischen.

89
89
89
2013-02-22 18:41:50 +0000

Dafür gibt es einen ssh-Schlüsselgenerator (-R).

man ssh-keygen lautet:

-R hostname

Entfernt alle zu hostname gehörenden Schlüssel aus einer known_hosts-Datei. Diese Option ist nützlich, um gehashte Hosts zu löschen (siehe die Option -H oben).

18
18
18
2009-08-26 16:17:33 +0000

Die Warnung teilt Ihnen die genaue Zeile in der Datei known hosts mit.

Hier ist ein Beispiel:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Siehe den Teil /home/user/.ssh/known_hosts:6? Er gibt die Datei- und Zeilennummer an.

11
11
11
2016-05-28 09:28:08 +0000

Sie müssen den folgenden Befehl ausführen, um dieses Problem zu beheben. Öffnen Sie das Terminal und geben Sie den folgenden Befehl ein:

Für alle folgenden Beispiele ersetzen Sie einfach den Wert nach -R

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com
8
8
8
2014-03-12 16:05:22 +0000

Sie können ssh auch anweisen, die Datei known_hosts nicht zu prüfen, indem Sie die Flags UserKnownHostsFile und StrictHostKeyChecking verwenden.

Zum Beispiel:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Der Einfachheit halber können Sie dies aliasisieren:

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Jetzt können Sie einfach fettgedrucktssh eingeben, wenn Sie sicher sind, dass Sie dem Zertifikat des Servers vertrauen.

4
4
4
2018-05-16 08:03:38 +0000

Alle Antworten sind gut, aber für echte SSH-Profis fehlen Informationen darüber, wie die ssh-Signatur mit der Portnummer entfernt werden kann:

  • Einfacher Befehl zum Entfernen der SSH-Host-Signatur:

  • Befehl zum Entfernen des komplexen ssh-Schlüssels, z.B. Sie verbinden sich mit ssh auf dem nicht standardmäßigen Port 222:

und erhalten eine Warnung, und um dies zu entfernen, müssen Sie eckige Klammern, Doppelpunkt Portnummer:

ssh-keygen -R [example.com]:222

verwenden.

1
1
1
2019-10-09 16:59:56 +0000

Hier ist eine Methode mit dem Ex-Editor:

ex +6d -scwq ~/.ssh/known_hosts

, wobei 6. Ihre in der Warnmeldung erwähnte Zeilennummer ist. Zum Beispiel diese:

Verletzender Schlüssel für IP in /home/user/. ssh/known_hosts:6 <== ZEILENNUMMER


Im Allgemeinen wird empfohlen, ex zu benutzen, um die Dateien nicht-interaktiv zu editieren statt sed zu benutzen, was eher ein S tream ED itor und sein Parameter -i ist, der eine nicht standardmäßige FreeBSD-Erweiterung ist.

0
0
0
2010-06-22 16:32:09 +0000

Sie können auch eine einzelne Zeile von bekannten Hosts entfernen, z. B. mit rmknownhost 111 (111 ist die zu entfernende Zeile):

#! /usr/bin/env ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

Speichern Sie dies als rmknownhost in einem Ordner aus Ihrer PATH.

0
0
0
2009-08-26 16:13:25 +0000

Der Eintrag für den Hostnamen oder die ip sollte in der ersten Spalte stehen. Die Warnung sollte auch eine Zeilennummer auflisten, in der der beanstandete Schlüssel liegt.

0
0
0
2014-06-27 13:23:54 +0000

Es handelt sich um eine Textdatei. Sie können sie leicht mit vi(m) bearbeiten und einfach die betreffende Zeile löschen (dd) und die Datei speichern (wq). Wenn es jedoch einen speziellen Befehl zum Entfernen eines Hosts gibt, ist das wahrscheinlich die sicherste Methode.