
Ich habe Raspberry Pi mit Raspbian OS an das lokale Netzwerk angeschlossen und die SSH-Anmeldung mit SSH-Schlüsseln eingerichtet. Ich konnte mich erfolgreich anmelden, indem ich Raspberry Pi eine statische IP zugewiesen habe.ssh [email protected]
Ich habe jetzt das Raspbian-Betriebssystem entfernt und eine SD-Karte mit Ubuntu Server (headless) eingelegt.
Ich habe den Raspberry Pi eingeschaltet und versucht, mich anzumelden, aber es trat folgende Fehlermeldung auf:
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: SHA256:asfasfdasdfasfdasfdasdfasdfasdfasdfasfasdf.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /home/joedoe/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /home/joedoe/.ssh/known_hosts:13
ERROR: remove with:
ERROR: ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
ERROR: ECDSA host key for 192.168.5.163 has changed and you have requested strict checking.
ERROR: Host key verification failed.
Ich fuhr fort und fügte hinzu .ssh/config
:
host 192.168.5.163
StrictHostKeyChecking no
aber jetzt bekomme ich
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 ECDSA key sent by the remote host is
SHA256:asdfasdfasdfasdfasdfasdfasdfasdfasdf.
Please contact your system administrator.
Add correct host key in /home/joedoe/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/joedoe/.ssh/known_hosts:13
remove with:
ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
[email protected]: Permission denied (publickey,password).
Das Problem besteht offensichtlich darin, dass ich mich mit derselben IP-Adresse bei zwei verschiedenen Betriebssystemen anmelden möchte, das neue Ubuntu-Betriebssystem die Einrichtung der SSH-Anmeldung jedoch nicht unterstützt und mir keinerlei Anmeldung erlaubt.
Wie muss ich vorgehen, um beide Betriebssysteme wechselseitig nutzen zu können?
Antwort1
Es gibt mehrere mögliche Lösungen.
Die einfachste Lösung ist die, die davidgo in seiner Antwort vorgeschlagen hat. Wie er erwähnt, macht sie Sie anfällig für einen MitM-Angriff (unwahrscheinlich, aber es ist gut, auch in privaten Situationen auf gute Sicherheit zu achten).
Host 192.168.5.163
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Eine etwas bessere Lösung wäre, wie Eugen Rieck vorgeschlagen hat, die /etc/ssh/ssh_host_*key*
Dateien zwischen beiden Zielbetriebssystemen zu synchronisieren.
Eine zuverlässigere Methode wäre, sich speziell für das zu verbindende Betriebssystem zu entscheiden, sodass Sie einen Fehler erhalten, wenn Sie sich mit dem falschen Betriebssystem verbinden. Dies würde beispielsweise dazu führen, dass Skripte, die SSH verwenden, fehlschlagen, wenn sie auf das falsche Betriebssystem abzielen.
Sie können dies erreichen, indem Sie effektiv einen Alias in verwenden ~/.ssh/ssh_config
.
Host raspbian-pi
Hostname 192.168.5.163
UserKnownHostsFile ~/.ssh/known_hosts_raspbian
Host centos-pi
Hostname 192.168.5.163
UserKnownHostsFile ~/.ssh/known_hosts_centos
Sie können sich dann mit verbinden, ssh <your_user>@raspbian-pi
um den Raspbian-Betriebssystemschlüssel abzurufen, dann auf Ihrem Raspberry Pi zu CentOS wechseln und dasselbe mit tun, ssh <your_user>@centos-pi
um den CentOS-Schlüssel abzurufen. Wenn Sie sich dann in Zukunft mit dem falschen Betriebssystem verbinden, wird der Hostschlüsselfehler angezeigt. Stellen Sie sicher, dass Sie beim ersten Verwenden des SSH-Befehls das richtige Betriebssystem verwenden, damit Sie den CentOS-Hostschlüssel nicht versehentlich in der Datei mit den bekannten Hosts von Raspbian speichern.
Haftungsausschluss: Ich habe diese Lösung noch nie verwendet und bin nicht in der Lage, sie zu testen, aber nach meinem Verständnis und der Dokumentation von SSH sollte sie ordnungsgemäß funktionieren.
Antwort2
Sie können das unmittelbare Problem beheben, indem Sie den Anweisungen in der Fehlermeldung folgen (dies müssen Sie bei jedem Boxwechsel tun) -
ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
Das Problem, auf das Sie stoßen, besteht darin, dass Ihr Computer erkannt hat, dass es sich bei dem System, bei dem er sich anmeldet, um ein anderes als das zuvor angezeigte handelt. Die Warnung dient dazu, Man-In-The-Middle-Angriffe zu verhindern.
Es gibt eine Reihe von Möglichkeiten, damit richtig umzugehen. Dazu gehören:
Richten Sie Namen für jede Box ein
/etc/hosts
und verweisen Sie dann mit Namen auf die SSH-Verbindung, nicht mit IP. Auf diese Weise verknüpft SSH mit jedem Namen unterschiedliche Server-Fingerabdrücke.Ignorieren der Prüfung (dadurch werden Sie anfällig für Mitm-Angriffe. Tun Sie dies also nur, wenn Sie die Risiken verstehen und sich damit wohl fühlen.) Sie können diese Prüfung ignorieren, indem Sie
-o UserKnownHostsFile=/dev/null
zu Ihrem SSH-Befehl hinzufügen oder-o StrictHostKeyChecking=no
2a. Sie können eine Konfiguration erstellen, die nur die Schlüsselprüfung für die eine IP ignoriert, indem Sie Folgendes in
~/.ssh/config
Host 192.168.5.163 StrictHostKeyChecking kein UserKnownHostsFile=/dev/null
Ich würde das nicht empfehlen, es sei denn, die Maschinen erfüllen dieselbe Rolle, aber Sie könnten die Hostschlüssel
/etc/ssh
auf beiden Servern (und auf dem, den Sie geändert haben) gleich machenrestart sshd
. Auf diese Weise erscheinen beide Server dem Client gleich.
Antwort3
Am einfachsten geht das durch Kopieren /etc/ssh/ssh_host_*_key*
von einer Installation auf die andere – dadurch erhalten beide Betriebssysteme die gleichen Hostschlüssel und damit den gleichen Fingerabdruck.
Antwort4
Ich persönlich verwende eine OpenSSH-Zertifizierungsstelle für alle meine Linux-Server. Das erspart mir viel Aufwand beim Einrichten einer neuen Zertifizierungsstelle und beim Orchestrieren meiner Endgeräte (Desktops, Laptops und Jump-Hosts), was ich zuvorgebloggt über.
Obwohl diese Funktion ursprünglich nicht für diesen (ungewöhnlichen) Anwendungsfall entwickelt wurde, bietet sie eine alternative Lösung für das Problem. Signieren Sie einfach beide Hostschlüssel mit dem privaten Schlüssel Ihrer Zertifizierungsstelle und fügen Sie den öffentlichen Teil Ihrer known_hosts
Datei hinzu. Ihr SSH-Client wird dann automatisch beiden Hostschlüsselsätzen vertrauen, ohne Sie wegen der Diskrepanzen anzuschreien. Sie müssen ssh-keygen -R
jedoch möglicherweise vorher alle gespeicherten Hostschlüssel löschen.
Dies hat den Vorteil, dass beide Systeme ihre Hostschlüssel getrennt und unterschiedlich halten können, was Ihnen die Möglichkeit bietet, sie anhand der Hostschlüssel (und Zertifikate – es gibt ein „Identitäts“-Feld, das Sie beim Signieren der Zertifikate anpassen können) zu unterscheiden. Dies ist auch insofern sicher, als dass Sie einem beliebigen Host, der unter dieser bestimmten IP-Adresse angezeigt wird, nicht blind vertrauen müssen.
Auch wenn Sie sich vor geleakten Schlüsseln schützen möchten, können Sie beim Signieren der Zertifikate „erlaubte Namen/IP-Adressen“ als „Principals“ hinzufügen, zum Beispiel:
ssh-keygen -s my_ca -I "RaspOS on RPi" -h -n 192.0.2.0 ssh_host_rsa_key.pub
Das Zertifikat wirdnichtvertrauenswürdig sein, es sei denn, sie werden vom Host unter bereitgestellt 192.0.2.0
, es sei denn, ein Angreifer kapert irgendwie Ihren Datenverkehrzusätzlich zudie Hostschlüssel und Zertifikate.
Nun, ich muss zugeben, dass es einfacher ist, die Host-Schlüssel zwischen beiden Betriebssystemen zu kopieren, da sie sich schließlich auf derselben physischen Maschine befinden.