it-swarm.com.de

Wie ignoriere ich die SSH-Authentizitätsprüfung?

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.

112
Johan

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. 

  • Lassen Sie die Überprüfung standardmäßig aktiviert (in ~/.ansible.cfg)
  • Deaktivieren Sie die Host-Schlüsselüberprüfung im Arbeitsverzeichnis für Playbooks, die Sie mit ephemeren Instanzen ausführen (./ansible.cfg neben dem Playbook für Komponententests mit virtuellen VMs, Automatisierung für kurzlebige ec2-Instanzen).
176
nikobelia

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 ...
21
Johan

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
2
dsaydon

Sie können es als Befehlszeilenargument übergeben, während Sie das Playbook ausführen:

ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'

1
paresh patil

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

0
Nitesh Jain

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.

0
davidolrik

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

0
justjais

Wenn Sie ansible.cfg oder playbook.yml nicht ändern möchten, können Sie einfach eine Umgebungsvariable festlegen:

export ANSIBLE_Host_KEY_CHECKING=False
0
Rene B.