Ich versuche, SSH von in Büro X zu einigen Linux-Kästen in Büro Y. Die Linux-Kästen in Büro Y sind hinter NAT und jeder laufen auf ihren eigenen Häfen. Ich kann alle erfolgreich über SSH erreichen, aber ich kann mich nicht authentifizieren.
Ich konnte SSH in die erste Box schreiben, aber als ich zur zweiten kam, hieß es:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
[edited out fingerprint]
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:1
Nach meinem Verständnis wird erwartet, dass von dieser öffentlichen IP-Adresse derselbe Schlüssel angezeigt wird, es wird jedoch ein anderer angezeigt, da es sich um einen anderen SSH-Server handelt.
Wie kann ich das Problem beheben, damit von jedem Server hinter derselben IP-Adresse ein anderer Schlüssel erstellt / akzeptiert wird?
Antworten:
Der Hostname oder die IP-Adresse wird als Hash (oder im Klartext, abhängig von den Optionen und den Standardversionen) in Ihrer
known_hosts
Datei gespeichert. Die einfachste Lösung besteht darin, für jeden Host einen Eintrag zu DNS oder/etc/hosts
(ugh!) - Datei mit derselben IP (WAN) -Adresse hinzuzufügen, z. B ./etc/hosts
:und dann
ssh
nach Hostname und Port.quelle
Es gibt einige Möglichkeiten, dies zu beheben:
Sie können die Hostschlüsselprüfung für diesen bestimmten Host deaktivieren. Geben Sie in Ihre
ssh_config
Datei (~/.ssh/config
) Folgendes ein:Dies konfiguriert,
ssh
um niemals Host-Schlüssel für zu speichernremote.host.name
, aber der Nachteil ist, dass Sie jetzt für Man-in-the-Middle-Angriffe offen sind (weil Sie blind Host-Schlüssel akzeptieren, von denen Sie nicht wissen, ob sich der Remote-Host-Schlüssel geändert hat).Sie können eine ähnliche Technik verwenden, um jedem Host einfach eine eindeutige
known_hosts
Datei zuzuweisen:Sie stellen dann mit
ssh hosta
oder eine Verbindung zu diesen Hosts herssh hostb
undssh
übernehmen den tatsächlichen Hostnamen und Port aus der Konfigurationsdatei.quelle
/etc/hosts
Datei funktioniert auch. Mir gefällt dies besser, weil (a) es keine erweiterten Berechtigungen erfordert und (b) Sie keine Portnummern in der Befehlszeile angeben müssen.~/.ssh/config
(für jeden Port ein andererhosta
hostb
) angegeben ist, wie in der Antwort von larsks beschrieben. Ebenso können Sie in dieser Konfigurationsdatei verschiedene Benutzernamen, Schlüssel usw. für die verschiedenen Hosts angeben, sodass Sie in der Befehlszeile nurssh hosta
nochssh hostb
HostKeyAlias
Direktive verwenden, anstatt die bekannten Hosts auf verschiedene Dateien aufzuteilen . zBHostKeyAlias hosta
Sie sagen nicht, welche Solaris-Version (und vor allem SSH) Sie verwenden, aber ausreichend aktuelle Versionen von OpenSSH haben dieses Problem behoben.
Hier sind zwei Einträge von mir
known_hosts
Datei, die dieselbe IP-Adresse, aber unterschiedliche Portnummern haben (einer ist die implizite 22); Wie Sie sehen können, sind die gespeicherten Schlüssel nicht gleich.Ich weiß nicht, welche Version von OpenSSH dies eingeführt hat, aber ich bin am Laufen
quelle
Um meinen Kommentar auf @larsks Antwort zu erweitern, halte ich die Verwendung von
~/.ssh/config
Einträgen für viel besser als das Ändern von / etc / hosts, obwohl ichHostKeyAlias
die bekannten Hosts lieber auf verschiedene Dateien aufteilen würde . z.B:Und ähnlich für
hostb
quelle