%20auf%20dem%20neuesten%20Stand%20halten%3F.png)
Nur um das gleich vorweg zu nehmen, damit mir nicht gesagt wird, ich solle es nicht tun:
- Die betreffenden Maschinen befinden sich alle in einem lokalen Netzwerk mit wenig bis gar keinem Internetzugang (sie sind nicht einmal gut mit dem Unternehmensnetzwerk verbunden).
- Jeder, der einen Man-in-the-Middle-Angriff durchführen kann, hat bereits Root-Rechte auf dem Rechner.
- Die Maschinen werden im Rahmen der Qualitätssicherungsverfahren neu installiert, daher sind neue Hostschlüssel wichtig (wir müssen sehen, wie die anderen Maschinen reagieren). Ich versuche lediglich, die Benutzerfreundlichkeit meiner Maschine zu verbessern.
Ich führe viele Neuinstallationen auf Maschinen durch, bei denen sich deren Hostschlüssel ändern. Dazu muss ich ~/.ssh/known_hosts
auf meine Maschine gehen, den alten Schlüssel löschen und den neuen hinzufügen. Das ist ein riesiger Aufwand, also habe ich angefangen, über Möglichkeiten nachzudenken, dies zu automatisieren.
Ich möchte nicht einfach blind jeden Hostschlüssel akzeptieren, daher kommt ein Patchen von OpenSSH, um Hostschlüssel zu ignorieren, nicht in Frage. Ich habe überlegt, einen Wrapper um den ssh
Befehl zu erstellen, der den zurückgegebenen Fehler erkennt ssh
und mir eine Aufforderung anzeigt, den alten Schlüssel zu löschen oder das Programm zu beenden. Ich habe auch überlegt, einen Daemon zu erstellen, der den neuesten Hostschlüssel von einer Maschine auf einer Whitelist abruft (es gibt ungefähr zwanzig Maschinen, die ständig neu installiert werden) und den alten Hostschlüssel in ersetzt known_hosts
.
Wie würden Sie diesen Prozess automatisieren?
Antwort1
Abhängig von den Gründen für die Neuinstallation/den gleichen IPs würde ich versuchen, „StrictHostKeyChecking“ in ~/.ssh/config für bestimmte Hosts/IPs/Muster einzurichten.
Wenn dies nicht möglich ist, sollten Sie das Laden der Schlüssel auf den Hosts automatisieren, beispielsweise im Neuinstallationsprozess.
Antwort2
Wenn Sie ein Konfigurationsmanagementsystem wie Puppet verwenden, können Sie es verwenden, damit die /etc/ssh/ssh_known_hosts
Datei mit den Hosts auf dem neuesten Stand bleibt, während sich die Client-Rechner beim zentralen Server anmelden. Anschließend können Sie die StrictHostKeyChecking
Option in der Konfigurationsdatei aktivieren.
Genau das machen wir mit unseren Amazon EC2-Instanzen, die sich bei unserem Puppet-Masterserver anmelden. Wir verwenden den Puppet-Server als Bastion-Jumpbox für unsere EC2-Instanzen und er ist die einzige Maschine, die sich per SSH mit ihnen verbinden darf. Anschließend halten wir die /etc/ssh/ssh_known_hosts
Datei mit den Hostschlüsseln und der /etc/hosts
Datei zum Aktualisieren der öffentlichen DNS-IP-Adresse von EC2 auf dem neuesten Stand.
Antwort3
Sie möchten ssh-keyscan
, das mit OpenSSH verteilt wird. Von dermanpage:
ssh-keyscan is a utility for gathering the public ssh host keys of a num‐
ber of hosts. It was designed to aid in building and verifying
ssh_known_hosts files.
Lassen Sie dies im Rahmen Ihrer Neuinstallation auf einem Computer mit einer aktuellen Schlüsselliste ausführen und verteilen Sie dann die aktualisierte known_hosts-Datei an die übrigen Computer.
Oder, wie andere bereits erwähnt haben, können Sie StrictHostKeyChecking deaktivieren. Dadurch werden Sie anfällig für Man-in-the-Middle-Angriffe, obwohl dies in Ihrer Umgebung möglicherweise kein Problem darstellt.
Antwort4
Vielleicht möchten Sie die Hostschlüssel vor der Neuinstallation speichern und anschließend wiederherstellen.
Alternativ können Sie ein Konfigurationsmanagement-Tool verwenden wieCFengineoderMarionette/etc/ssh/ssh_known_hosts
um eine autoritative Adresse an alle Clients auf Ihrer Site zu verteilen . (OpenSSH prüft /etc/ssh/ssh_known_hosts
, ob kein passender Eintrag in vorhanden ist ~/.ssh/known_hosts
.)