Zwei Optionen - die erste, wie Sie in Ihrer eigenen Antwort gesagt haben, besteht darin, die Umgebungsvariable ANSIBLE_HOST_KEY_CHECKING
auf False zu setzen.
Die zweite Möglichkeit, es festzulegen, besteht darin, es in einer ansible.cfg-Datei abzulegen. Dies ist eine sehr nützliche Option, da Sie diese entweder global (auf System- oder Benutzerebene, in /etc/ansible/ansible.cfg
oder ~/.ansible.cfg
) oder in einer Konfigurationsdatei im selben Verzeichnis festlegen können als das Playbook, das Sie ausführen.
Erstellen Sie dazu eine ansible.cfg
Datei an einem dieser Speicherorte und fügen Sie Folgendes hinzu:
[defaults]
host_key_checking = False
Sie können dort auch viele andere praktische Standardeinstellungen festlegen, z. B. ob zu Beginn eines Spiels Fakten gesammelt werden sollen oder nicht, ob an mehreren Stellen deklarierte Hashes zusammengeführt oder durch andere ersetzt werden sollen usw. Hier in den Ansible-Dokumenten finden Sie eine große Liste von Optionen .
Bearbeiten: ein Hinweis zur Sicherheit.
Die SSH-Hostschlüsselüberprüfung ist eine sinnvolle Sicherheitsschicht für persistente Hosts. Wenn Sie mehrmals eine Verbindung zu demselben Computer herstellen, ist es hilfreich, den Hostschlüssel lokal zu akzeptieren.
Bei längerlebigen EC2-Instanzen ist es sinnvoll, den Hostschlüssel mit einer Aufgabe zu akzeptieren, die bei der ersten Erstellung der Instanz nur einmal ausgeführt wird :
- name: Write the new ec2 instance host key to known hosts
connection: local
shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"
Es gibt keinen Sicherheitswert für die Überprüfung von Hostschlüsseln in Instanzen, die Sie dynamisch aufstehen und direkt nach der Ausführung des Playbooks entfernen. Es gibt jedoch einen Sicherheitswert für die Überprüfung von Hostschlüsseln auf persistente Computer. Daher sollten Sie die Überprüfung des Hostschlüssels je nach logischer Umgebung unterschiedlich verwalten.
- Lassen Sie die Überprüfung standardmäßig aktiviert (in
~/.ansible.cfg
).
./ansible.cfg
Deaktivieren Sie die Hostschlüsselprüfung im Arbeitsverzeichnis für Playbooks, die Sie für kurzlebige Instanzen ausführen ( neben dem Playbook für Komponententests gegen vagabundierende VMs, Automatisierung für kurzlebige ec2-Instanzen).
known_hosts
Dateien speichern, damit SSH und Ansible den Computer erkennen können. Wenn Sie dies nicht tun, insbesondere durch Deaktivieren der Hostschlüsselprüfung, wird die Sicherheit von SSH auf nahezu Null herabgesetzt und MITM-Angriffe werden zugelassen. Viele Computer, die sich in einem "internen Netzwerk" befinden, sind tatsächlich mit dem Internet verbunden. Über eine einzige schnellere DNS-Antwort können Sie mit dem Angreifer anstelle Ihres Ziels sprechen.ssh-keyscan <ip list>
auf einem vertrauenswürdigen Computer (für mich ist es ein Bastion / Jump-Host) im selben Netzwerk und gab die Ergebnisse in ein.known_hosts
Zum Einrichten dieses vertrauenswürdigen Hosts stellt AWS das zur Verfügung Host-Schlüssel in den Startprotokollen der Instanz, daher war die Suche nach diesem Schlüssel ein manueller Schritt, den ich nie herausgeschnitten habe, wenn ich meine Umgebung vollständig neu erstellt habe. Dieser Host musste jedoch normalerweise nicht gelöscht werden. Dies kann helfen.Ich habe die Antwort gefunden, Sie müssen die Umgebungsvariable
ANSIBLE_HOST_KEY_CHECKING
auf setzenFalse
. Beispielsweise:quelle
vorwärts zu nikobelia
Für diejenigen, die Jenkins zum Ausführen des Playbooks verwenden, habe ich meinem Jenkins-Job vor dem Ausführen des Ansible-Playbooks die Umgebungsvariable ANSIBLE_HOST_KEY_CHECKING = False hinzugefügt. Beispiel:
quelle
Ändern
host_key_checking
anfalse
für alle Hosts ist eine sehr schlechte Idee.Das einzige Mal, wenn Sie es ignorieren möchten, ist der "erste Kontakt", den diese beiden Aufgaben ausführen:
Daher deaktivieren wir die Hostschlüsselprüfung nur, wenn wir den Hostschlüssel nicht in unserer
known_hosts
Datei haben.quelle
Sie können es als Befehlszeilenargument übergeben, während Sie das Playbook ausführen:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
quelle
Wenn Sie nicht wollen , ändern
ansible.cfg
oder dieplaybook.yml
dann können Sie nur eine Umgebungsvariable gesetzt:quelle
Verwenden Sie den Parameter validate_certs, um die SSH-Validierung zu ignorieren
Auf diese Weise wird der SSH-Validierungsprozess ignoriert
quelle
validate_certs
Parameter weist boto einfach an, das HTTPS-Zertifikat der AWS-API nicht zu validieren. Dies hat keinen Einfluss auf die Überprüfung des SSH-Schlüssels.Ich weiß, dass die Frage beantwortet wurde und auch richtig ist, wollte aber nur das ansible Dokument verknüpfen, in dem klar erklärt wird, wann und warum die jeweilige Prüfung hinzugefügt werden sollte: Host-Key-Prüfung
quelle
Die meisten Probleme treten auf, wenn Sie dem dynamischen Inventar (über das Modul add_host) im Playbook einen neuen Host hinzufügen möchten. Ich möchte die Überprüfung des Fingerabdruck-Hosts nicht dauerhaft deaktivieren, daher sind Lösungen wie das Deaktivieren in einer globalen Konfigurationsdatei für mich nicht in Ordnung. Das Exportieren von var wie
ANSIBLE_HOST_KEY_CHECKING
vor dem Ausführen von Playbook ist eine weitere Aufgabe, die vor dem Ausführen ausgeführt werden muss.Es ist besser, eine lokale Konfigurationsdatei in demselben Verzeichnis hinzuzufügen, in dem sich das Playbook befindet. Erstellen Sie eine Datei mit dem Namen
ansible.cfg
und fügen Sie folgenden Text ein:Sie müssen nicht daran denken, etwas in env vars hinzuzufügen oder
ansible-playbook
Optionen hinzuzufügen . Es ist einfach, diese Datei auf ansible git repo zu stellen.quelle