Entfernen Sie den Schlüssel von known_hosts

325969
Adam Matan

Ich habe in den letzten Wochen mehrere virtuelle Maschinen gebaut. Das Problem ist, das .ssh/known_hostsgibt mir den Mann in der Mitte Warnung. Dies geschieht, weil der IP der virtuellen Maschine ein weiterer Fingerabdruck zugeordnet ist.

In der .ssh/known_hostsDatei finde ich jedoch nicht den Datensatz, der sich auf die IP bezieht, sondern nur zwei bizarre, schlüsselartige Strings und "ssh-rsa".

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

111
Die "bizarren, schlüsselartigen Zeichenfolgen", auf die Sie sich beziehen, sind die gehashten Hosts / IP-Adressen. Dies ist eine Sicherheitsfunktion, mit der ein Eindringling davon abgehalten wird, zu wissen, auf welche Systeme Sie zugreifen können. Wenn Sie dies sehen, hat Ihre ssh_config `` `HashKnownHosts yes``` gesetzt. Deebster vor 10 Jahren 5
Wenn Sie der Meinung sind, dass der Inhalt der Datei zu verwirrend ist, haben Sie wahrscheinlich Zeilenumbruch aktiviert. Deaktiviere es. Alle Zeilen beginnen mit einem Hostnamen oder einer IP-Adresse. Daniel B vor 6 Jahren 0

10 Antworten auf die Frage

94
Sean Staats

Die einfachste Lösung ist:

rm -f .ssh/known_hosts 

ssh erstellt die Datei erneut, aber Sie verlieren die Schlüsselüberprüfung für andere Hosts!

Oder Sie können verwenden:

ssh-keygen -R "hostname" 

Oder die ssh-Meldung "Man-in-the-middle" sollte angeben, in welcher Zeile der known_hosts-Datei der fehlerhafte Fingerabdruck enthalten ist. Bearbeiten Sie die Datei, springen Sie zu dieser Zeile und löschen Sie sie.

Richtig - die Zeilennummer ist etwas schüchtern: "Fügen Sie den korrekten Host-Schlüssel in /home/adam/.ssh/known_hosts hinzu, um diese Nachricht zu löschen. Beleidigender Schlüssel in /home/udi/.ssh/known_hosts:48". Zeile 48 wurde entfernt und es hat funktioniert! Adam Matan vor 15 Jahren 0
`ssh-keygen -R hostname` funktioniert ebenfalls. grawity vor 15 Jahren 47
Danke, dass Sie `ssh-keygen -R` erwähnt haben. Ich wollte nur einen Host zu Testzwecken aus 'known_hosts' entfernen (dh ohne dass der Hostschlüssel geändert wurde) und dieser Hosteintrag wurde gehasht ... Andre Holzner vor 13 Jahren 0
Wenn wir diese Datei entfernen, werden auch andere Schlüssel entfernt. shgnInc vor 10 Jahren 4
Das Entfernen der Datei ist ein schlechter Ratschlag, es ist, als würde man jemandem sagen, er solle einen neuen PC kaufen, weil der alte eine kaputte Maus hat. Das manuelle Bearbeiten einer Datei, die von einer offiziellen Anwendung bearbeitet werden kann, ist ebenfalls keine gute Idee. Die Option `ssh-keygen` wurde aufgrund eines Kommentars hinzugefügt, jedoch ohne Erläuterung. Ich denke nicht, dass diese Antwort so viele positive Bewertungen verdient. kraxor vor 10 Jahren 11
-1 wegen der ganzen ersten Zeile "Lösche die ganze known_hosts-Datei". Dies ist eine schreckliche, schreckliche, schreckliche Sache, die vorgeschlagen werden sollte, und sollte herausgeschnitten werden. Olivier Dulac vor 9 Jahren 9
Diese Lösung ist übertrieben. Entfernen Sie einfach die beleidigende Zeile. Das ist es. Blake Frederick vor 8 Jahren 2
Werden neueste known_hosts in der oberen Zeile oder im unteren Bereich hinzugefügt? hello_there_andy vor 7 Jahren 0
79
mikewaters
sed -i '6d' ~/.ssh/known_hosts 

Ändert die Datei ~ / .ssh / known_hosts: 6 und entfernt die 6. Zeile.

Meiner Meinung nach verwenden ssh-keygen -R ist die eine bessere Lösung für einen openssh-Power-User, während Ihr normaler Linux-Administrator seine sed-Fähigkeiten besser aufrechterhalten möchte, indem Sie die obige Methode verwenden.

Ich denke nicht, dass es ein guter Rat ist, eine Konfigurationsdatei manuell zu bearbeiten, wenn Sie dafür eine offizielle Anwendung haben. Risiken einzugehen macht Sie nicht zu einem Profi, die schnellste und sicherste Option zu finden. Es ist, als würde man den Leuten sagen, sie sollen "/ etc / sudoers" ohne "visudo" editieren. Wenn Sie Ihre Sed-Fähigkeiten verbessern möchten, machen Sie dies, ohne Ihr System zu stören. kraxor vor 10 Jahren 12
"Wenn Sie eine offizielle Anwendung dafür haben" => Sowohl "ssh-keygen -R" als auch "sed -i d" sind ziemlich "offiziell", und beide werden auf absehbare Zeit funktionieren. Util ssh-keygen erlaubt das Entfernen nach Zeilennummern, beide sind vollkommen akzeptabel (da Zeilennummern oft einfacher zu handhaben sind und weniger fehleranfällig sind als der Umgang mit modernen Hostnamen des Rechenzentrums). michael vor 8 Jahren 0
A) Die Löschung speziell der 6. Zeile ist alles sehr "schau keine Hände". Überhaupt keine Erklärung, was für die 6. Zeile der Datei von Bedeutung ist ?! B) Auch "man ssh-keygen" erwähnt "ssh-keygen -R Hostname", den Sie gerade gesagt haben: "ssh-keygen -R", wobei kein Hostname angegeben wurde, und Sie haben nicht erklärt, was Sie damit meinen. barlop vor 6 Jahren 2
58
user201564

Dafür gibt es einen ssh-keygen-Schalter (-R).

man ssh-keygen liest:

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

Dies ist die einfachste und sicherste Methode. Leo vor 10 Jahren 7
Hinweis: Dadurch werden die Berechtigungen der known_hosts-Datei in 0600 geändert. Wenn Sie aus irgendeinem Grund eine gemeinsam genutzte known_hosts-Datei haben, kann dies die gemeinsame Nutzung dieser Datei deaktivieren. Jiri Klouda vor 7 Jahren 0
und der Richtige. Außerdem musste ich [localhost]: port] mit den Klammern verwenden, da ich einen benutzerdefinierten Port verwendet habe, denke ich = /. Wie andere schon sagten, würde ich auch den Ansatz der SSH-Schlüsselüberprüfung für die Entwicklung von Transient / Testsystemen verwenden. Pysis vor 6 Jahren 0
16
innaM

In der Warnung wird die genaue Zeile in der bekannten Hosts-Datei angezeigt.

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! 

Sehen Sie den /home/user/.ssh/known_hosts:6Teil? Es gibt die Datei- und Zeilennummer an.

9
rouble

Sie können ssh auch anweisen, die known_hosts-Datei nicht mit den Flags UserKnownHostsFile und StrictHostKeyChecking zu überprüfen.

Zum Beispiel:

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

Zur Vereinfachung können Sie dies als Alias ​​verwenden:

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

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

Was für eine schreckliche Idee. Deaktivieren Sie dauerhaft eine Sicherheitsstufe, nur weil Sie zu faul sind, Ihre `~ / .ssh / known_hosts 'auf dem neuesten Stand zu halten? Warum nicht einfach "Telnet" verwenden? "Wann immer Sie sich sicher sind" - wenn Sie sich jemals sicher sind, haben Sie keine Ahnung, was eine MITM-Attacke ist, und Sie sollten wahrscheinlich einige Zeit damit verbringen, gute Literatur zu lesen. kraxor vor 10 Jahren 7
Basierend auf der Frage des OP denke ich, dass dies eine gültige Antwort ist. Manchmal haben Sie ein Testsystem, auf dem Sie viele VMs erstellen oder zerstören. (Ich mache das gerade, während ich mich auf die RHCE-Prüfung vorbereite.) Es kann keine Auswirkungen auf die Sicherheit geben. Die Auswirkungen auf die Sicherheit sind zwar großartig, aber ich denke nicht, dass dies als "schreckliche Idee" bezeichnet werden muss. Rick Chatham vor 9 Jahren 2
verwandt: http://superuser.com/a/1126243/73961 michael vor 8 Jahren 0
4
Tarun Gupta

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

Bei allen Beispielen unten 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 
Diese Methode wurde bereits in den vorherigen Antworten vorgeschlagen. Könnten Sie das, was in Ihrer Antwort anders ist, erläutern? Burgi vor 8 Jahren 0
@Burgi - diese Antwort enthält mehr Details über die Syntax von `ssh-keygen -R 'als alle anderen Antworten. Es zeigt durch Beispiel, was Sie nach '-R' schreiben können. Diese Antwort lohnt sich also, auch wenn sie keine völlig neue Antwort ist. Yitz vor 6 Jahren 0
@Yitz Mein Kommentar wurde im Rahmen der Überprüfung abgegeben. Zu der Zeit (vor 18 Monaten) dachte ich, dass die Frage etwas Hilfe brauchte, um sie noch besser zu machen. Burgi vor 6 Jahren 0
2
grosser

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#" File.open(hosts, 'w'){|f| f.write content * ""} 

Speichern Sie dies als rmknownhostin einem Ordner von Ihrem PATH.

Was ist der Vorteil davon, es in einem bestimmten Texteditor zu tun? Gibt es einen Grund, dies nicht so zu tun, wie zum Beispiel Sudoers mit visudo zu bearbeiten? Andy Lester vor 14 Jahren 0
Welche Distros kommen damit? Ubuntu scheint es nicht zu haben. flickerfly vor 11 Jahren 0
Der Vorteil ist, dass es automatisiert und schnell ist / es ist eine separate Binärdatei, die Sie selbst hinzufügen grosser vor 11 Jahren 0
Sie können Ihr Skript auch hier veröffentlicht haben, anstatt Ihren eigenen Blogeintrag zu verlinken, den Sie an dem Tag erstellt haben, an dem Sie diese Antwort gepostet haben. Dies gilt als Spam, IMHO. Ganz zu schweigen davon, dass Sie einen einfachen Alias ​​erstellen können, um dasselbe Ergebnis zu erzielen, ohne dass ein 7-Zeilen-Ruby-Skript erforderlich ist. kraxor vor 10 Jahren 0
0
stimms

Der Eintrag für den Hostnamen oder die IP-Adresse sollte in der ersten Spalte stehen. Die Warnung sollte auch eine Zeilennummer enthalten, in der der fehlerhafte Schlüssel liegt.

0
Ryan Griggs

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

Ich sehe nicht, wie das direkte Bearbeiten der Datei in VIM "unsicher" ist. Es basiert auf Ihrem Komfort mit VIM. Insbesondere bei dieser Datei besteht das größte Risiko darin, zu viele Schlüssel zu löschen. In diesem Fall werden Sie nur noch einmal aufgefordert. Rick Chatham vor 9 Jahren 0
Die "Sicherheit", auf die ich mich bezogen habe, beinhaltet 1) das Vergessen / Nicht-Wissen, abhängige Informationen aus anderen Dateien zu entfernen (falls vorhanden) und 2) versehentlich mehr oder weniger als nötig zu löschen, wodurch die Datei beschädigt wird. Ryan Griggs vor 9 Jahren 0
0
Arunas Bartisius

Alle Antworten sind gut, aber für echte SSH-Profis fehlen Informationen zum Entfernen der SSH-Signatur mit Portnummer.

ZB verbinden Sie sich mit

ssh some.host.name -p 222 

und Sie erhalten eine Warnung, und um dies zu entfernen, müssen Sie die Doppelpunktnummer in eckigen Klammern verwenden:

ssh-keygen -R [some.host.name]:222 

Hoffen Sie, dass dies für Benutzer, die keine Standardkonfigurationen verwenden, hilft.