So entfernen Sie strenge RSA-Schlüsselüberprüfung in SSH und was ist das Problem hier?


42

Ich habe einen Linux-Server, der mir bei jeder Verbindung die Meldung anzeigt, die den SSH-Hostschlüssel geändert hat:

$ ssh root @ host1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @ WARNUNG: IDENTIFIZIERUNG DES FERNHOST GEÄNDERT! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ Es ist möglich, dass jemand etwas Schlimmes tut! Jemand könnte Sie gerade belauschen (Man-in-the-Middle-Angriff)! Es ist auch möglich, dass der RSA-Hostschlüssel gerade geändert wurde. Der Fingerabdruck für den vom Remote-Host gesendeten RSA-Schlüssel lautet 93: a2: 1b: 1c: 5f: 3e: 68: 47: bf: 79: 56: 52: f0: ec: 03: 6b. Bitte kontaktieren Sie Ihren Systemadministrator. Fügen Sie in /home/emerson/.ssh/known_hosts den richtigen Hostschlüssel hinzu, um diese Nachricht zu entfernen. Beleidigender Schlüssel in /home/emerson/.ssh/known_hosts:377

Der RSA-Hostschlüssel für Host1 wurde geändert und Sie haben eine strikte Überprüfung angefordert. Überprüfung des Hostschlüssels fehlgeschlagen.

Es hält mich für ein paar Sekunden eingeloggt und beendet dann die Verbindung.

host1: ~ / .ssh # Read from remote host host1: Verbindung von Peer zurückgesetzt Verbindung zu host1 geschlossen.

Weiß jemand, was passiert und was ich tun könnte, um dieses Problem zu lösen?


1
Dies täuscht frühere Frage: serverfault.com/questions/2988/…
Drew Stephens

Antworten:


68

Bitte löschen Sie nicht die gesamte Datei known_hosts, wie von einigen Personen empfohlen. Dadurch wird die Warnung vollständig ungültig. Dies ist eine Sicherheitsfunktion, die Sie warnt, dass möglicherweise ein Mann in der Mitte angegriffen wurde.

Ich schlage vor, Sie identifizieren, warum es den Eindruck hat, dass sich etwas geändert hat. Höchstwahrscheinlich hat ein SSH-Upgrade die Verschlüsselungsschlüssel aufgrund einer möglichen Sicherheitslücke geändert. Anschließend können Sie diese bestimmte Zeile aus Ihrer known_hosts-Datei löschen:

sed -i 377d ~/.ssh/known_hosts

Dies d eletes Linie 377 , wie nach dem Doppelpunkt in der Warnung angezeigt:

/home/emerson/.ssh/known_hosts:377

Alternativ können Sie den entsprechenden Schlüssel wie folgt entfernen

ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)

Bitte löschen Sie NICHT die gesamte Datei und stellen Sie sicher, dass dies tatsächlich der Computer ist, zu dem Sie eine Verbindung herstellen möchten, bevor Sie den spezifischen Schlüssel löschen.


Es werden nicht mehr als 350 Server gelöscht, da ein Schlüssel nicht übereinstimmt. Irgendeine Idee, warum die Verbindung immer wieder getrennt wird?
setatakahashi

Ist es nicht gelöst, wenn Sie den entsprechenden Datensatz "known_hosts" entfernt haben? Wenn nicht, können Sie den ssh-Client im ausführlichen Modus ausführen und ihn irgendwo einfügen.
Adam Gibbins

1
Der Rechner wird geschlossen, weil der Host-Schlüssel ungültig ist, genau wie es heißt. Wenn Sie es mit der Sicherheit ernst meinen, müssen Sie sich beim Administrator des Servers erkundigen, ob sich der Hostschlüssel aus legitimen Gründen geändert hat. Wenn ja, können Sie es ersetzen, wie von Adam erklärt.
Matthew Flaschen

Ich folgte Ihrem Vorschlag, aber $ sed -i "46 d" ~ / .ssh / known_hosts sed: 1: "/Users/myusr/.ssh ...": zusätzliche Zeichen am Ende des Befehls, so dass ich es manuell mit entfernte vim und es hat funktioniert. Vielen Dank!
Luis Ramirez-Monterosa

3
Adams Syntax ist fast korrekt, aber Sie benötigen ein Leerzeichen zwischen "377" und "d". Unter OS X befinden sich bekannte Hosts auch in ~ / .ssh / known_hosts; das Fehlen eines "." im Dateinamen.
ktappe

27

Ich denke, dass einige der hier gegebenen Antworten die in der Frage des OP empfohlene Vorgehensweise betreffen, aber die Frage nicht vollständig beantworten.

Die Frage lautet: "Wie entferne ich die strenge RSA-Schlüsselüberprüfung in SSH und wo liegt das Problem?"

Das Problem hierbei ist, wie von einigen anderen empfohlen, eine Änderung des Hosts, die wahrscheinlich auf eine Neuinstallation des Servers zurückzuführen ist (häufigstes Szenario). Die empfohlene Lösung besteht in der Tat darin, den fehlerhaften Schlüssel aus der Datei .ssh / authorized_keys mit einer Inline-Sedierung zu entfernen.

Es wurden jedoch keine Antworten auf den spezifischen Teil der Frage " So entfernen Sie die strikte RSA-Schlüsselüberprüfung in SSH " gefunden.

Sie können die StrictHostKey-Prüfung in Ihrer SSH-Konfigurationsdatei entfernen, die normalerweise unter gespeichert ist ~/.ssh/config.

Ein Beispiel für einen Host-Block finden Sie unten:

Host 101
  HostName yourip|hostname
  User youruserid
  IdentityFile /path/to/keyfile
  Port 22
  StrictHostKeyChecking no

Die speziell hinzugefügte Zeile ist die letzte, StrictHostKeyChecking nodie genau das tut. Abhängig von Ihrem speziellen Szenario kann dies für Sie nützlich sein, z. B. das Ausführen mehrerer virtualisierter Container auf einem dedizierten Server in wenigen Schritten, das Stoppen und Starten einer anderen Instanz auf derselben IP-Adresse.


3
+1 Weil dieser Beitrag tatsächlich den streng überprüfenden Teil der Fehlermeldung anspricht.
Shibumi

1
+1 von mir auch für die Adressierung des Inhalts der Frage. Abhängig von den Faktoren ist möglicherweise mehr zu tun. Dieser Ansatz verschlechtert die Host-Prüfung von "streng" auf "etwas" (meine Terminologie). In meiner Situation hatte ssh die Erlaubnis, mich nicht anzumelden, da ich mich nur mit einem Passwort anmelden wollte. Dies wurde durch "einige" Host-Überprüfungen deaktiviert. Sie müssen also ssh anweisen, / dev / null als "UserKnownHostsFile" zu verwenden. Dadurch wird die Host-Prüfung auf "Keine" gesetzt und die obigen DIRE-WARNHINWEISE gelten. Machen Sie dies also nicht global oder dauerhaft.
Cardiff Space Man

Das ist wirklich eine elegante Lösung. Danke für das Teilen!
LeOn - Han Li

10

Eine andere Möglichkeit, StrictHostKeyChecking zu entfernen, wenn Sie dies nur für einen einzelnen Server tun müssen:

ssh <server> -o StrictHostKeyChecking=no

Hiermit können Sie sich anmelden, das Problem jedoch nicht dauerhaft beheben.
Andres Canella

Wenn ich es tue, kann ich den Schlüssel hinzufügen, wodurch das Problem dauerhaft
behoben wird

Vielleicht haben wir ein anderes Problem? Ich verbinde mich mit einem Server, der vorher eine andere IP hatte.
Andres Canella

Wenn Sie einen Server haben, dessen Daten geändert wurden, müssen Sie ihn aus Ihrer bekannten Hosts-Datei löschen (nachdem Sie festgestellt haben, dass die Änderung korrekt ist) und die neuen Informationen hinzufügen. Wenn Sie einen neuen Server haben, können Sie mit -o eine Verbindung zum Server herstellen und dessen Informationen hinzufügen.
Greg Dougherty

Ich denke, es ist eine gute Praxis, StrictHostKeyChecking in Ihrer Konfiguration auf YES zu setzen und diesen Schalter nur zu verwenden, wenn Sie wissen, dass Sie eine Verbindung zu einem neuen Server herstellen oder die Schlüssel auf einem alten Server selbst geändert haben.
Mohak

5

Ist das zuallererst Ihre Maschine? Haben Sie die Host-Schlüssel wissentlich geändert? Wenn nicht, wäre ich sehr besorgt, dass etwas diese Daten geändert hat.

Zweitens, drehen Sie das SSH-Debugging auf,

ssh -vvv user@host

und schauen Sie nach, was Ihnen das sagt. Versuchen Sie auch, in / var / log / secure und / var / log / messages auf dem Server, mit dem Sie sich verbinden wollen, nach Hinweisen zu suchen. sshd gibt gute Fehlermeldungen aus.

Drittens ist diese Maschine mit dem Internet verbunden? Sollten Sie wirklich Root-Anmeldungen zulassen?


1
+1 für den Root-Logins Kommentar
Fahad Sadah

Alles, was erforderlich ist, damit dieser Fehler auftritt, ist das erneute Abbild des Zielcomputers. Wenn Sie eine Verbindung zu einem Ziel herstellen, das sich auf Ihrer Seite einer DMZ befindet, ist ein MitM-Angriff sehr unwahrscheinlich.
ktappe

3

Sie erhalten dies, weil sich etwas geändert hat (z. B. neue Netzwerkkarte, neue IP-Adresse, Änderung der Serversoftware usw.). Sicherheitsfokus hat einen schönen Artikel über den Schutz von SSH-Hostschlüsseln .

Entfernen Sie einfach den Schlüssel (mit SFTP oder ähnlichem) vom Server, indem Sie die $HOME/.ssh/known_hostsDatei bearbeiten , und akzeptieren Sie den neuen Schlüssel bei der nächsten Verbindung.

Ihre Verbindung wird möglicherweise aufgrund der Einstellung "StrictHostKeyChecking" getrennt. In diesem Thread finden Sie ein ähnliches Problem.


2
Nein, bitte tu das nicht. Dadurch wird die gesamte Sicherheit, die diese Funktion bietet, ungültig. Bitte entfernen Sie nur den spezifischen Schlüssel, der geändert wurde, nicht alle bekannten_Hosts.
Adam Gibbins

5
Ich habe nicht empfohlen, die Datei known_hosts zu entfernen. Ich habe empfohlen, sie zu bearbeiten und den Schlüssel daraus zu entfernen.

Oh, entschuldigung, falsch gelesen.
Adam Gibbins

2
Diese Nachricht kann mit Sicherheit nicht durch eine neue IP-Adresse ausgelöst werden, geschweige denn durch eine neue Netzwerkkarte. Siehe die richtige Antwort von Adam Gibbins.
bortzmeyer

1
Bevor Sie abstimmen (ich finde, dass die Leute damit sehr zufrieden sind), machen Sie Ihre Recherchen. Lesen Sie diesen Security Focus-Artikel unter securityfocus.com/infocus/1806 . Ich zitiere ein wenig: "Warum kann sich ein Hostschlüssel ändern? Der Computer, zu dem Sie eine Verbindung herstellen möchten, wurde auf einen anderen DNS-Namen oder eine andere IP-Adresse verschoben oder durch einen neuen ersetzt." Wenn eine Antwort fürchterlich falsch ist, lassen Sie bitte eine Korrektur zu. Immerhin ist dies ein Wiki.

3

Wie der "Host" [allgemein definiert] für den ssh-Client so aussieht, als hätte sich alles geändert, von einer Neuinstallation / Multiboot bis hin zu einem völlig anderen Computer mit einer zuvor verbundenen IP-Adresse Error.

Es ist nicht erforderlich, die strenge Prüfung auszuschalten, und das Löschen gespeicherter Schlüssel im Großhandel ist nicht sinnvoll.

Es ist durchaus möglich, zwei verschiedene Schlüssel in known_hosts für einen bestimmten Hostnamen oder eine bestimmte IP-Adresse aufzulisten. Geben Sie 2 Alternativen an, je nachdem, ob Sie den 'alten' Schlüssel benötigen, der derzeit in known_hosts gespeichert ist

Löschen Sie entweder den bestimmten Schlüssel, auf den es sich bezieht, bei l377 von known_hosts für das OP, oder behalten Sie beide bei

Die einfachste Möglichkeit, beide zu behalten und das Löschen von Schlüsseln in known_hosts zu vermeiden, ist

  1. Bearbeiten Sie known_hosts, um # vorübergehend am Anfang des 'alten' Eintrags hinzuzufügen, auf den in known_hosts [@ l377] verwiesen wird
  2. Verbinde [ssh mit dem Host], stimme der Aufforderung zu, den neuen Schlüssel 'automatisch' hinzuzufügen
  3. Bearbeiten Sie anschließend known_hosts erneut, um das # zu entfernen.

Weitere Antworten unter "Korrekten Hostschlüssel in known_hosts hinzufügen" / Mehrere SSH-Hostschlüssel pro Hostname?


Ich hatte nichts über den Zwei-Schlüssel-Trick gewusst. Das ist kein dokumentiertes Verhalten, oder?
Hackerb9
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.