Wie bearbeite ich known_hosts, wenn mehrere Hosts dieselbe IP und denselben DNS-Namen haben?

Wie bearbeite ich known_hosts, wenn mehrere Hosts dieselbe IP und denselben DNS-Namen haben?

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.9und die Namen sind hostnameundhostname.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_hostsDatei 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_hostsDatei 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, hostnameoder aufrufe hostname.domainnameoder 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.

Quelle:https://stackoverflow.com/questions/733753/wie-man-eine-ssh-host-key-verification-mit-2-verschiedenen-hosts-auf-dem-gleichen-aber-handle

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?

verwandte Informationen