Ich ssh regelmäßig in einen Computer, der ein Dual-Boot-OS X / Linux-Computer ist. Die beiden Betriebssysteminstanzen verwenden nicht denselben Hostschlüssel, sodass sie als zwei Hosts angesehen werden können, die dieselbe IP und denselben DNS verwenden. 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 herzustellen, darin, beide zur ~/.ssh/know_hosts
Datei hinzuzufügen . Allerdings ist es leichter gesagt als getan, da die Datei gehasht wird, und hat wahrscheinlich mehrere Einträge pro Host ( 192.168.0.9
, hostname
, hostname.domainname
). Als Konsequenz habe ich 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 unter Beibehaltung der Hashes zu bearbeiten ? Wie kann ich zum Beispiel 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 mir erlauben , nahtlos an diesen Computer mit ssh zu verbinden, egal ob ich es nennen 192.168.0.9
, hostname
oder hostname.domainname
, noch wenn es verwendet , um seine Linux hostkey oder seine OSX hostkey. Ich möchte jedoch weiterhin eine Warnung erhalten, wenn es sich um einen echten Man-in-the-Middle-Angriff handelt, dh wenn ein anderer Schlüssel als diese beiden verwendet wird.
Antworten:
Die einfachste Lösung besteht darin, für Linux und OS X nur dieselben Host-Schlüssel zu verwenden. Wählen Sie also einen Satz von
/etc/ssh/ssh_host_*_key*
Dateien aus und kopieren Sie sie auf das andere Betriebssystem. Dann wird einem SSH-Client derselbe Host-Schlüssel angezeigt, unabhängig davon, unter welchem Betriebssystem Sie gebootet haben, und der SSH-Client ist auch nicht klüger.quelle
/private/etc/ssh_host*
nicht/etc/ssh/ssh_host*
.sshd
Lädt die Host-Schlüssel einmal beim Start, sodass Sie höchstwahrscheinlich neu starten müssensshd
. Ich werde das zur Antwort hinzufügen. Welche anderen Lösungen besser sind, hängt von Ihrer Situation ab. Ich würde argumentieren, dass die Hauptvorteile dieser Methode darin bestehen, dass sie nur eine einmalige Einrichtung erfordert und mit größerer Wahrscheinlichkeit mit mehreren SSH-Client-Implementierungen zusammenarbeitet.sshd
Host-Schlüssel für jede neue Verbindung lädt. Vielleicht war es schon lange so und ich ging einfach davon aus, dass Host-Schlüssel wie anderesshd
Konfigurationen behandelt wurden . Das kann also Ihr Problem sein oder auch nicht.Wie @Izzy in einem obigen Kommentar angedeutet hat, teilt ssh Ihnen die fehlerhafte Zeile mit. Wenn Sie diese Zeile entfernen (an einer anderen Stelle speichern), den neuen Schlüssel akzeptieren und die entfernte Zeile dann zurückkopieren, erhalten Sie zwei Schlüssel für dieselbe Zeile Host, und ssh wird entweder akzeptieren.
(Sie können auch
ssh-keygen -H -F <hostname>
Zeilen in Ihrer Datei known_hosts suchen, die mit diesem Hostnamen übereinstimmen. Wenn Sie dies nach dem Zurückkopieren der entfernten Zeile ausführen, sollten zwei Einträge aufgelistet werden.)Wenn jemand weiß, wie man PuTTY dazu bringt, dasselbe zu tun, wäre ich sehr interessiert, davon zu hören.
quelle
Ich habe dies gefunden, das dir dabei helfen kann, was du erreichen willst.
Quelle: /programming/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the- same- but
quelle
known_hosts
und gebracht werdenCheckHostIP
.Der einfachste Weg, um Ihr Problem zu lösen, besteht darin, jedem Host eine eigene IP-Adresse zuzuweisen. Mit 253 verfügbaren Adressen in Ihrem (privaten) Netz und IPv4 sollte das keine große Sache sein. Geben Sie ihnen feste IP-Adressen (da ein DHCP-Server den Computer anhand der MAC-Adresse der Netzwerkkarte identifiziert und beide dieselbe Adresse erhalten würden). Ich sehe keine andere Lösung, wenn Sie die Sicherheitsmaßnahmen einhalten möchten (die ich auch wegen dieses kleinen "Trostes" nicht fallen lassen würde).
quelle
192.168.0.xx
und nicht privat. Es ist eine "echte" IPv4-Adresse, die von meiner Universität vergeben wird und die ich nicht ändern kann.Dieses Problem tritt nicht auf, wenn ich eine Verbindung zu verschiedenen VPS-Boxen herstelle, die dieselbe IP-Adresse verwenden, da jede über einen anderen SSH-Port verfügt (20022.30022 usw.), sodass sie als bekannte Hosts mit unterschiedlichen Schlüsseln registriert sind.
Könnte das ein Workaround für Sie sein?
quelle
Ein weiterer Artikel , der verschiedene Möglichkeiten zur Behandlung Ihres Problems beschreibt:
quelle
hostname
wenn Linut oder OSX neu gestartet wird, deaktivierenDa Sie die strikte Überprüfung des Hostschlüssels beibehalten möchten, müssten sie unterschiedliche
known_hosts
Dateien verwenden. Richten Sie dazu Ihre~/.ssh/config
Datei (oder die/etc/ssh/ssh_config
Datei, wenn Sie dies für mehrere lokale Benutzerkonten benötigen) folgendermaßen ein:und
$REALHOSTNAME
natürlich durch den tatsächlichen Hostnamen oder die tatsächliche IP-Adresse ersetzen . (Es spielt keine Rolle, für welche Sie sich entscheiden, solange Sie etwas nach "Hostname" auswählen, das sich in die IP-Adresse auflösen würde, aber ich würde den Hostnamen einer IP-Adresse vorziehen, nur nach allgemeinen Grundsätzen.)Dann
ssh myserver.linux
undssh myserver.osx
somit kann man verschiedene Hostschlüssel haben, aber man bekommt trotzdem die Prüfung. Wenn Linux installiert ist und Sie OS X eingeben (oder umgekehrt), erhalten Sie die Warnung (die meines Erachtens der gewünschte Effekt ist).Wenn ich dieses Problem hätte, würde ich sicherstellen, dass in der Hauptdatei etwas völlig falsch ist
known_hosts
, das mit keinem der beiden Dateien übereinstimmt. Wenn Sie also etwas eingeben,$REALHOSTNAME
anstattmyserver.osx
eine Warnung zu erhalten. :-) Ich würde das tun, indem ich so etwas setzein my
/etc/hosts
, dann mache ich einenssh $REALHOSTNAME
und akzeptiere den neuen Schlüssel, dann nehme ich diesen Eintrag heraus.quelle