
Ich greife regelmäßig per SSH auf einen Computer zu, der ein Dual-Boot-OS X/Linux-Computer ist. Die beiden OS-Instanzen teilen sich nicht denselben Host-Schlüssel, daher können sie als zwei Hosts betrachtet werden, die dieselbe IP und denselben DNS teilen. Nehmen wir an, die IP ist 192.168.0.9
und die Namen sind hostname
undhostname.domainname
Soweit ich verstanden habe, besteht die Lösung, um eine Verbindung zu den beiden Hosts herstellen zu können, darin, sie beide zur ~/.ssh/know_hosts
Datei hinzuzufügen. Das ist jedoch leichter gesagt als getan, da die Datei gehasht ist und wahrscheinlich mehrere Einträge pro Host enthält ( 192.168.0.9
, hostname
, hostname.domainname
). Als Konsequenz habe ich die folgende Warnung
Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'
Gibt es eine einfache Möglichkeit, die known_hosts
Datei zu bearbeiten und dabei die Hashes beizubehalten? Wie kann ich beispielsweise die Zeilen finden, die einem bestimmten Hostnamen entsprechen? Wie kann ich die Hashes für einige bekannte Hosts generieren?
Die ideale Lösung würde es mir ermöglichen, mich nahtlos per SSH mit diesem Computer zu verbinden, egal ob ich ihn 192.168.0.9
, hostname
oder aufrufe hostname.domainname
oder ob er seinen Linux-Hostschlüssel oder seinen OSX-Hostschlüssel verwendet. Ich möchte jedoch trotzdem eine Warnung erhalten, wenn es sich um einen echten Man-in-the-Middle-Angriff handelt.dhwenn ein anderer Schlüssel als diese beiden verwendet wird.
Antwort1
Die einfachste Lösung besteht darin, für Linux und OS X einfach dieselben Hostschlüssel zu verwenden. Wählen Sie also einen Satz von /etc/ssh/ssh_host_*_key*
Dateien aus und kopieren Sie diese auf das andere Betriebssystem. Dann wird einem SSH-Client derselbe Hostschlüssel angezeigt, unabhängig davon, welches Betriebssystem Sie gebootet haben, und der SSH-Client wird davon nichts merken.
Antwort2
Wie @Izzy in einem der obigen Kommentare vorgeschlagen hat, teilt Ihnen ssh die fehlerhafte Zeile mit. Wenn Sie diese Zeile entfernen (und sie woanders speichern), den neuen Schlüssel akzeptieren und die entfernte Zeile dann zurückkopieren, haben Sie am Ende zwei Schlüssel für denselben Host, und ssh akzeptiert beide.
(Sie können es auch verwenden, ssh-keygen -H -F <hostname>
um in Ihrer known_hosts-Datei nach Zeilen zu suchen, die mit diesem Hostnamen übereinstimmen. Wenn Sie dies ausführen, nachdem Sie die entfernte Zeile zurückkopiert haben, sollten zwei Einträge aufgelistet werden.)
Wenn jemand weiß, wie man mit PuTTY dasselbe macht, würde ich mich sehr über eine Nachricht freuen.
Antwort3
Ich habe Folgendes gefunden, das Ihnen bei Ihrem Ziel helfen könnte.
Erstellen Sie wie folgt eine Konfigurationsdatei in Ihrem .ssh-Verzeichnis:
Host server1 Hostname x1.example.com HostKeyAlias server1 CheckHostIP no Port 22001 User karl Host server2 Hostname x2.example.com HostKeyAlias server2 CheckHostIP no Port 22002 User karl
Erklärung unten (aus man ssh_config)
CheckHostIP
Wenn dieses Flag auf "yes" gesetzt ist, prüft ssh(1) zusätzlich die Host-IP-Adresse in der Datei known_hosts. Dadurch kann ssh erkennen, ob sich ein Host-Schlüssel aufgrund von DNS-Spoofing geändert hat. Wenn die Option auf "no" gesetzt ist, wird die Prüfung nicht ausgeführt. Die Vorgabe ist "yes".
HostKeyAlias
Gibt einen Alias an, der anstelle des echten Hostnamens verwendet werden soll, wenn der Hostschlüssel in den Hostschlüssel-Datenbankdateien gesucht oder gespeichert wird. Diese Option ist nützlich zum Tunneln von SSH-Verbindungen oder für mehrere Server, die auf einem einzigen Host ausgeführt werden.
Durch die Eingabe von Benutzername und Port müssen Sie diese Optionen nicht auch noch in der Befehlszeile angeben. Sie können einfach Folgendes verwenden:
% ssh server1 % ssh server2
Antwort4
Dieses Problem tritt bei mir nicht auf, wenn ich eine Verbindung zu verschiedenen VPS-Boxen mit derselben IP-Adresse herstelle, da jede über einen anderen SSH-Port (20022, 30022 usw.) verfügt und sie daher als bekannte Hosts mit unterschiedlichen Schlüsseln registriert sind.
Könnte das ein Workaround für Sie sein?