Meine `~ / .ssh / known_hosts` Datei vorübergehend ignorieren?

48

Gibt es eine Möglichkeit, meine ~/.ssh/known_hostsDatei vorübergehend zu ignorieren ?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

HINWEIS:

.. von wenige Antwort (en) / Kommentar (e) Ich weiß , dass meine Frage ein wenig irreführend, so kurz , es ist Verhalten) zu erwarten, so dass es normal ist (in meinem Fall) ein gültiger Grund dahinter, warum ich ist will sehen "ignoriere es")

alexus
quelle
9
Sie stellen die falsche Frage. Sie sollten das Problem nicht "ignorieren". Sie sollten herausfinden, was los ist und es lösen.
Michael Hampton
9
Ich kann nicht für den Benutzer sprechen, aber ein Beispiel wäre eine Situation, in der Sie einen automatisierten Installationsprozess entwickeln (z. B. einen Kickstart), bei dem Ihr iterativer Workflow das Erstellen, Verbinden, Testen, Ändern des Erstellungsprozesses und das Neuerstellen von umfasst immer wieder kratzen.
Goladus,
10
@MichaelHampton - Ich bekomme das die ganze Zeit, wenn VMware und VirtualBox IP-Adressen für Gäste recyceln. Für mich ist es die richtige Frage :)
1
FWIW Ich bin ständig auf der Suche nach dieser Antwort, da sich in meinem LAN ein System befindet, auf dem ich ein Dropbear (mit einem anderen Hostschlüssel) verwende, um das Kennwort für die Festplattenverschlüsselung beim Start einzugeben.
Zulan
1
@jww Dies ist die falsche Frage / Lösung für Ihr Szenario. Stattdessen sollten Sie SSH so konfigurieren, dass die IP-Adresse ignoriert wird, aber der Hostschlüssel weiterhin überprüft wird. Siehe zum Beispiel hier
Jon Bentley

Antworten:

56

Mit können Sie ssh -o StrictHostKeyChecking=nodie Prüfung known_hostsvorübergehend ausschalten . Aber ich würde davon abraten. Sie sollten wirklich überprüfen, warum sich der Hostschlüssel geändert hat.

Eine andere Möglichkeit besteht darin, einen bestimmten Eintrag ~/.ssh/configfür den betreffenden Host zu Ihrem hinzuzufügen . Dies kann ein gültiger Ansatz sein, wenn Sie einen bestimmten Host haben, der bei jedem Neustart neue Host-Schlüssel generiert und mehrmals täglich aus einem gültigen Grund neu gestartet wird.

Host <your problematic host>
  StrictHostKeyChecking no
Sami Laine
quelle
das ist erwartetes Verhalten), also ist es normal (in meinem Fall)
alexus
1
@alexus Wenn es "erwartet" ist, können Sie die Option auf einen bestimmten Hostnamen / eine bestimmte IP-Adresse anwenden, für die Sie dies erwarten.
chrylis -on strike-
1
@alexus Und denk dran, wenn du das tust, verlierst du so ziemlich den ganzen Schutz, den ssh bietet. Sie können auch Telnet verwenden, da es für jemanden trivial wäre, Sie zu MITM zu machen und Ihren gesamten Datenverkehr zu erfassen.
Michael Hampton
1
Dies funktioniert nicht mehr (zumindest für OpenSSH_5.3p1)
am
-o StrictHostKeyChecking=noentfernt die Möglichkeit, sich mit einem Passwort anzumelden. Verstößt das Fehlen einer Flagge nicht direkt gegen die Unix-Prinzipien, dem Benutzer zu erlauben, Verhalten zu erzwingen? Ich versuche gerade, mich auf einem lokalen Computer mit einer lokalen IP anzumelden. Der Hostschlüssel hat sich geändert, weil ich den Computer neu formatiert habe. Alles hier macht Sinn und nichts ist unter den gegebenen Umständen ein Sicherheitsrisiko.
Wowfunhappy
31

Um Ihre bekannte Hosts-Datei in einer POSIX-Umgebung vollständig zu ignorieren, stellen Sie die Optionen GlobalKnownHostsFileund UserKnownHostsFileauf /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

Wenn Sie diese StrictHostKeyChecking=noOption aktivieren, können Sie eine Verbindung herstellen, bei SSH wird jedoch weiterhin eine Warnung angezeigt :

ssh -o StrictHostKeyChecking=no user@host

Wie andere angemerkt haben, ist es wahrscheinlich besser, das zugrunde liegende Problem anzusprechen. Sie können beispielsweise die SSH-Zertifikatauthentifizierung in Betracht ziehen , um Hosts zu überprüfen.

MattB
quelle
2
Dies kann eine bessere Antwort sein als die derzeit am höchsten bewertete, da sie die Verwendung der Passwortauthentifizierung ermöglicht, die ansonsten deaktiviert wäre (natürlich sollten Sie verstehen, was Sie genau tun, bevor Sie Ihr Passwort eingeben ...)
VZ.
Ich bin ein wenig verwirrt hier: sollten Sie nicht auch verwenden , -o StrictHostKeyChecking=no zusätzlich zu den -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nullOptionen - für eine endgültige Antwort?: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
Gabriel Staples
Zugehörige Artikel, die ich online gefunden habe: shellhacks.com/disable-ssh-host-key-checking
Gabriel Staples
5

Wenn Sie den Server neu installiert haben und sich daher die Identifikation geändert hat, löschen Sie einfach die angegebene Zeile 155 aus /Users/alexus/.ssh/known_hostsund fahren Sie fort.

Wenn Sie zwischen verschiedenen privaten Netzwerken wechseln, sollten Sie stattdessen Hostnamen verwenden, um eine Verbindung herzustellen, da der ssh-Client abhängig vom Hostnamen auch Schlüssel speichert. Fügen Sie so etwas zu Ihrem hinzu /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

und dann verwenden, ssh server1wenn eine Verbindung zu Subnetz 1 besteht und ssh server2wenn eine Verbindung zu Subnetz 2 besteht. Auf diese Weise können beide Server unterschiedliche Hostschlüssel haben.

etagenklo
quelle
Was passiert, wenn Sie zwischen zwei privaten Netzwerken wechseln und eine Verbindung zu zwei gleichen IP-Adressen herstellen?
Alexus
1
Ich habe meine Antwort bearbeitet.
Etagenklo
2
@alexus Dann brauchst du IPv6 :) Aber das wären nützliche Informationen in deiner ursprünglichen Frage gewesen.
Michael Hampton
2

-o StrictHostKeyChecking=no Funktioniert nur, wenn der Host nicht bereits in der Datei known_hosts vorhanden ist.

Ich denke, es ist sauberer (keine Warnungen), wenn Sie erwarten, dass sich der Host-Schlüssel möglicherweise aufgrund des Klonens von VMs ändert, um das Ignorieren dieser Art von Hosts zu erzwingen:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"
Jose Sa
quelle
2

Einige Leute sagen, es ist nicht richtig, Sie sollten dies nicht tun und so weiter, aber ich brauche dies auch, um ein paar eingebettete Geräte immer und immer wieder zu testen. Sie müssen deaktivieren StrictHostKeyChecking=no, dies ist richtig, aber auch bekannte Hosts-Datei zurücksetzen /dev/null. Hier ein Beispiel mit Autologin und psauf entfernten Geräten.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'
eddso
quelle
-2

Melden Sie sich bei all Ihren Servern an (und wenn ja, bei RedHat) rm -f /etc/ssh/ssh_host_*und starten Sie SSHD neu.

Dadurch werden neue SSH-Hostschlüssel erstellt, die nicht ignoriert werden müssen.

Ich kann mir nur einen Fall vorstellen, in dem SSH-Schlüssel, die auf mehrere Server geklont wurden, nicht nur erwünscht sind, sondern auch keine Warnungen auslösen. Vielfache von einem A-Datensatz. Alle Hosts mit dem A-Datensatz haben denselben Schlüssel.

Niels
quelle
6
Diese Antwort ist falsch. Der Fingerabdruck ist lokal auf dem Client.
89c3b1b8-b1ae-11e6-b842-48d705