Gibt es eine Möglichkeit, die von Ansible durchgeführte Überprüfung der SSH-Authentizität zu ignorieren? Wenn ich zum Beispiel gerade einen neuen Server eingerichtet habe, muss ich diese Frage mit Ja beantworten:
GATHERING FACTS ***************************************************************
The authenticity of Host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?
Ich weiß, dass dies im Allgemeinen eine schlechte Idee ist, aber ich baue dies in ein Skript ein, das bei meinem Cloud-Anbieter zunächst einen neuen virtuellen Server erstellt und dann automatisch mein ansehbares Spielbuch zur Konfiguration aufruft. Ich möchte jeden menschlichen Eingriff während der Skriptausführung vermeiden.
Zwei Optionen - die erste, wie Sie in Ihrer eigenen Antwort sagten, setzt die Umgebungsvariable ANSIBLE_Host_KEY_CHECKING
auf False.
Die zweite Möglichkeit, es einzustellen, besteht darin, es in einer Datei ansible.cfg abzulegen. Dies ist eine wirklich nützliche Option, da Sie dies entweder global festlegen können (auf System- oder Benutzerebene, in /etc/ansible/ansible.cfg
oder ~/.ansible.cfg
) oder in einer Konfigurationsdatei in das gleiche Verzeichnis wie 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 Sie zu Beginn eines Spiels Fakten sammeln oder nicht, ob Sie Hashes vereinen, die an mehreren Stellen deklariert sind, oder eine durch eine andere ersetzen, und so weiter. Es gibt eine ganze große Liste von Optionen hier in den Ansible-Dokumenten.
Edit: ein Hinweis zur Sicherheit.
Die Überprüfung des SSH-Hostschlüssels ist eine sinnvolle Sicherheitsschicht für permanente Hosts. Wenn Sie häufig eine Verbindung zu demselben Computer herstellen, ist es wichtig, den Hostschlüssel lokal zu akzeptieren.
Bei längerlebigen EC2-Instanzen ist es sinnvoll, den Host-Schlüssel bei einem Task-Lauf nur einmal bei der ersten Erstellung der Instanz zu akzeptieren:
- 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 Host-Schlüsseln in Instanzen, die Sie dynamisch aufstellen und unmittelbar nach der Ausführung des Abspielbuchs entfernen. Es gibt jedoch einen Sicherheitswert, wenn Sie die Host-Schlüssel auf permanenten Maschinen überprüfen. Daher sollten Sie die Host-Schlüsselprüfung in jeder logischen Umgebung unterschiedlich verwalten.
~/.ansible.cfg
)./ansible.cfg
neben dem Playbook für Komponententests mit virtuellen VMs, Automatisierung für kurzlebige ec2-Instanzen).Ich habe die Antwort gefunden. Sie müssen die Umgebungsvariable ANSIBLE_Host_KEY_CHECKING
auf False
setzen. Zum Beispiel:
ANSIBLE_Host_KEY_CHECKING=False ansible-playbook ...
weiterleiten an nikobelia
Für diejenigen, die Jenkins verwenden, um das Spielbuch auszuführen, fügte ich vor dem Ausführen des Ansible-Playbooks die Umgebungsvariable ANSIBLE_Host_KEY_CHECKING = False .__ zum Beispiel hinzu.
export ANSIBLE_Host_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv
Sie können es als Befehlszeilenargument übergeben, während Sie das Playbook ausführen:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
Verwenden Sie den Parameter validate_certs, um die SSH-Validierung zu ignorieren
- ec2_AMI:
instance_id: i-0661fa8b45a7531a7
wait: yes
name: ansible
validate_certs: false
tags:
Name: ansible
Service: TestService
Auf diese Weise wird der SSH-Validierungsprozess ignoriert
Das Ändern von Host_key_checking
in false
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 werden:
- name: Check known_hosts for {{ inventory_hostname }}
local_action: Shell ssh-keygen -F {{ inventory_hostname }}
register: has_entry_in_known_hosts_file
changed_when: false
ignore_errors: yes
- name: Ignore Host key on first run
when: has_entry_in_known_hosts_file == 1
set_fact:
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
Daher deaktivieren wir die Host-Schlüsselüberprüfung nur, wenn der Host-Schlüssel nicht in unserer known_hosts
-Datei enthalten ist.
Ich weiß, dass die Frage beantwortet wurde und auch richtig ist, wollte aber nur das anzeigbare Dokument verlinken, in dem klar erklärt wird, wann und warum eine entsprechende Prüfung hinzugefügt werden sollte: Host-Schlüssel-Prüfung
Wenn Sie ansible.cfg
oder playbook.yml
nicht ändern möchten, können Sie einfach eine Umgebungsvariable festlegen:
export ANSIBLE_Host_KEY_CHECKING=False