Wie setze ich host_key_checking = false in einer ansible Inventardatei?

113

Ich möchte den ansible-playbookBefehl anstelle von ' vagrant provision' verwenden. Die Einstellung host_key_checking=falsein der hostsDatei scheint jedoch nicht zu funktionieren.

# hosts file
vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key 
ansible_ssh_user=vagrant ansible_ssh_port=2222 ansible_ssh_host=127.0.0.1 
host_key_checking=false

Gibt es eine Konfigurationsvariable Vagrantfile, die diesen Wert überschreiben kann?

mbdev
quelle

Antworten:

182

Aufgrund der Tatsache, dass ich dies 2014 beantwortet habe, habe ich meine Antwort aktualisiert, um neuere Versionen von ansible zu berücksichtigen.

Ja, Sie können dies auf Host- / Inventarebene tun (was bei neueren Ansible-Versionen möglich wurde ) oder auf globaler Ebene :

Inventar :

Fügen Sie Folgendes hinzu.

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

Gastgeber :

Fügen Sie Folgendes hinzu.

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

Hosts / Inventaroptionen funktionieren mit dem Verbindungstyp sshund nicht paramiko. Einige Leute argumentieren möglicherweise nachdrücklich, dass Inventar und Hosts sicherer sind, da der Umfang eingeschränkter ist.

global:

Ansible User Guide - Überprüfung des Hostschlüssels

  • Sie können dies entweder in der /etc/ansible/ansible.cfgoder in der ~/.ansible.cfgDatei tun :

    [defaults]
    host_key_checking = False
    
  • Oder Sie können eine Variable einrichten und env einrichten (dies funktioniert möglicherweise nicht bei neueren ansible-Versionen):

    export ANSIBLE_HOST_KEY_CHECKING=False
    
Rico
quelle
32
Ich verwende ansible 1.7.2 und habe die Erfahrung gemacht, dass die Umgebungsvariable ANSIBLE_HOST_KEY_CHECKINGfunktioniert, -e 'host_key_checking=False'aber nicht.
Marc Abramowitz
6
Ihre erste Aussage "Ja, aber nicht auf Host- / Inventarebene" ist falsch. Sie können ansible_ssh_common_args='-o StrictHostKeyChecking=no'oderansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Shammel Lee
1
Nur die letzte Option hat bei mir funktioniert (Export ANSIBLE_HOST_KEY_CHECKING = False), bevor ich mein Playbook ausgeführt habe.
Ted-K42
1
"Ja, aber nicht auf Host- / Inventarebene." - Wird durch meine Antwort als falsch erwiesen . Ich würde sogar sagen, dass dies keine wirkliche Antwort auf die Frage ist, wie es auf Inventarebene eingestellt werden soll.
Gertvdijk
@gertvdijk Ich habe dies 2014 beantwortet. Ansible hat eine Reihe von Überarbeitungen durchlaufen. Ist das nicht mehr der Fall?
Rico
68

Ja, Sie können dies auf Inventar- / Hostebene festlegen.

Mit einer bereits akzeptierten Antwort denke ich, dass dies eine bessere Antwort auf die Frage ist, wie dies auf Inventarebene gehandhabt werden soll. Ich halte dies für sicherer, indem ich diese unsichere Einstellung auf die dafür erforderlichen Hosts (z. B. Testsysteme, lokale Entwicklungsmaschinen) isoliere.

Was Sie auf Inventarebene tun können, ist Hinzufügen

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

oder

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

zu Ihrer Host-Definition (siehe Ansible Behavioral Inventory Parameters) ).

Dies funktioniert, sofern Sie nicht den sshVerbindungstyp verwendenparamiko oder etwas anderes).

Zum Beispiel würde eine Vagrant-Hostdefinition wie folgt aussehen ...

vagrant ansible_port=2222 ansible_host=127.0.0.1 ansible_ssh_common_args='-o StrictHostKeyChecking=no'

oder

vagrant ansible_port=2222 ansible_host=127.0.0.1 ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

Das Ausführen von Ansible ist dann erfolgreich, ohne dass eine Umgebungsvariable geändert wird.

$ ansible vagrant -i <path/to/hosts/file> -m ping
vagrant | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Wenn Sie dies für eine Gruppe von Hosts tun möchten, finden Sie hier einen Vorschlag, um es zu einer zusätzlichen Gruppenvariablen für eine vorhandene Gruppe wie diese zu machen:

[mytestsystems]
test[01:99].example.tld

[insecuressh:children]
mytestsystems

[insecuressh:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
gertvdijk
quelle
4
Dies ist eine viel bessere Antwort.
Marcv81
Dieser Vorschlag hat für mich funktioniert, und ich stimme zu, dass dies aus Sicherheitsgründen auf Projektebene (und nicht auf globaler Ebene) festgelegt werden sollte.
Andrewdcato
1
Ich habe ansible_ssh_common_args: '-o StrictHostKeyChecking=no'in die Datei group_vars yml-Datei aufgenommen.
g.
4

Ich konnte nicht verwenden:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

in der Inventardatei. Es scheint, dass ansible diese Option in meinem Fall nicht berücksichtigt (ansible 2.0.1.0 von pip in ubuntu 14.04).

Ich entschied mich für:

server ansible_host=192.168.1.1 ansible_ssh_common_args= '-o UserKnownHostsFile=/dev/null'

Es hat mir geholfen.

Sie können diese Variable auch für jeden Host in einer Gruppe festlegen:

[servers_group:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=/dev/null'
vskubriev
quelle
Das Setzen der Option UserKnownHostsFile/ funktioniert auch in der Tat. Es ist seltsam, dass die Einstellung bei Ihnen nicht funktioniert. Höchstwahrscheinlich ist eine Option in Ihrer SSH-Konfiguration die Ursache. GlobalKnownHostsFile/dev/nullStrictHostKeyChecking
Gertvdijk
+1 für -o UserKnownHostsFile=/dev/null. Ohne das hat es auch bei mir einfach nicht funktioniert, unabhängig von dem Ort und der Art und Weise, die ich ansible_ssh_common_args in den anderen Antworten angegeben habe.
Bis Kuhn
0

In /etc/ansible/ansible.cfgKommentar die Zeile:

host_key_check = False

und in /etc/ansible/hostsKommentar die Zeile

client_ansible ansible_ssh_host=10.1.1.1 ansible_ssh_user=root ansible_ssh_pass=12345678

Das ist alles

user8759294
quelle
0

Das Hinzufügen von Folgendem zur Ansible-Konfiguration funktionierte bei Verwendung von Ansible-Ad-hoc-Befehlen:

[ssh_connection]
# ssh arguments to use
ssh_args = -o StrictHostKeyChecking=no

Ansible Version

ansible 2.1.6.0
config file = /etc/ansible/ansible.cfg
Dnafikation
quelle
0

Sie legen diese Konfigurationen entweder in der Datei /etc/ansible/ansible.cfgoder ~/.ansible.cfgoder ansible.cfg(in Ihrem aktuellen Verzeichnis) fest

[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

getestet mit ansible 2.9.6 in ubuntu 20.04

Alupotha
quelle