Jak ustawić host_key_checking = false w pliku inwentaryzacji ansible?

113

Chciałbym użyć ansible-playbookpolecenia zamiast „ vagrant provision”. Jednak ustawienie host_key_checking=falsew hostspliku nie wydaje się działać.

# 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

Czy istnieje zmienna konfiguracyjna poza Vagrantfiletym, która może zastąpić tę wartość?

mbdev
źródło

Odpowiedzi:

182

W związku z tym, że odpowiedziałem na to w 2014 roku, zaktualizowałem swoją odpowiedź, aby uwzględnić nowsze wersje ansible.

Tak, możesz to zrobić na poziomie hosta / ekwipunku (co stało się możliwe w nowszych wersjach ansibla ) lub na poziomie globalnym:

inwentarz :

Dodaj następujące elementy.

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

gospodarz :

Dodaj następujące elementy.

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

hosty / opcje spisu będą działać z typem połączenia, ssha nie paramiko. Niektórzy ludzie mogą zdecydowanie argumentować, że zasoby i hosty są bezpieczniejsze, ponieważ zakres jest bardziej ograniczony.

światowy:

Podręcznik użytkownika Ansible - Sprawdzanie klucza hosta

  • Możesz to zrobić w pliku /etc/ansible/ansible.cfglub ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    
  • Lub możesz ustawić i zmienną env (może to nie działać w nowszych wersjach ansibla):

    export ANSIBLE_HOST_KEY_CHECKING=False
    
Rico
źródło
32
Używam ansible 1.7.2 i z mojego doświadczenia wynika, że ​​zmienna środowiskowa ANSIBLE_HOST_KEY_CHECKINGdziała, ale -e 'host_key_checking=False'nie działa.
Marc Abramowitz
6
Twoje pierwsze stwierdzenie „Tak, ale nie na poziomie hostów / zasobów” jest fałszywe. Możesz użyć ansible_ssh_common_args='-o StrictHostKeyChecking=no'lubansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Shammel Lee
1
Tylko ostatnia opcja działała dla mnie (eksport ANSIBLE_HOST_KEY_CHECKING = False) przed uruchomieniem mojego playbooka.
ted-k42
1
„Tak, ale nie na poziomie hostów / zasobów reklamowych”. - Okazało się, że jest fałszywe, czego dowodzi moja odpowiedź . Powiedziałbym nawet, że nie jest to tak naprawdę odpowiedź na pytanie, jak ustawić to na poziomie zapasów .
gertvdijk
@gertvdijk Odpowiedziałem na to pytanie w 2014 roku. Ansible przeszedł kilka poprawek. Już tak nie jest?
Rico
68

Tak, możesz to ustawić na poziomie zasobów / hosta.

Biorąc pod uwagę już zaakceptowaną odpowiedź, myślę, że jest to lepsza odpowiedź na pytanie, jak sobie z tym poradzić na poziomie zapasów. Uważam, że jest to bezpieczniejsze dzięki odizolowaniu tego niezabezpieczonego ustawienia od hostów wymaganych do tego (np. Systemów testowych, lokalnych maszyn programistycznych).

To, co możesz zrobić na poziomie zapasów, to dodać

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

lub

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

do definicji swojego hosta (patrz Ansible Behavioral Inventory Parameters ).

To zadziała, pod warunkiem, że użyjesz sshtypu połączenia, a nie paramikolub czegoś innego).

Na przykład definicja hosta Vagrant wyglądałaby następująco…

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

lub

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

Uruchomienie Ansible zakończy się wtedy sukcesem bez zmiany żadnej zmiennej środowiskowej.

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

Jeśli chcesz to zrobić dla grupy gospodarzy, oto sugestia, aby uczynić ją dodatkową grupą jako zmienną dla istniejącej grupy, na przykład:

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

[insecuressh:children]
mytestsystems

[insecuressh:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
gertvdijk
źródło
4
To znacznie lepsza odpowiedź.
marcv81
Ta sugestia zadziałała w moim przypadku i zgadzam się, że jest to coś, co powinno zostać ustalone na poziomie projektu (a nie na poziomie globalnym) ze względów bezpieczeństwa.
andrewdcato
1
I zawarte ansible_ssh_common_args: '-o StrictHostKeyChecking=no'w pliku yml plików group_vars.
g.
4

Nie mogłem użyć:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

w pliku inwentarza. Wygląda na to, że ansible nie bierze pod uwagę tej opcji w moim przypadku (ansible 2.0.1.0 z pip w Ubuntu 14.04)

Postanowiłem użyć:

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

Pomogło mi.

Możesz także ustawić tę zmienną w grupie zamiast tego dla każdego hosta:

[servers_group:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=/dev/null'
vskubriev
źródło
Ustawienie opcji UserKnownHostsFile/ GlobalKnownHostsFilena /dev/nullrównież faktycznie działa. To dziwne, że ustawienie StrictHostKeyCheckingnie działa dla Ciebie. Najprawdopodobniej przyczyną jest jakaś opcja w konfiguracji SSH.
gertvdijk
+1 dla -o UserKnownHostsFile=/dev/null. Bez tego też po prostu nie zadziałało, niezależnie od lokalizacji i sposobu, który ansible_ssh_common_args określiłem w innych odpowiedziach.
Do Kuhn
0

W /etc/ansible/ansible.cfgOdkomentuj linii:

host_key_check = False

i /etc/ansible/hostsodkomentuj linię

client_ansible ansible_ssh_host=10.1.1.1 ansible_ssh_user=root ansible_ssh_pass=12345678

To wszystko

user8759294
źródło
0

Dodanie następujących elementów do konfiguracji ansible działało podczas korzystania z poleceń ansible ad-hoc:

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

Wersja Ansible

ansible 2.1.6.0
config file = /etc/ansible/ansible.cfg
dnafikacja
źródło
0

Możesz ustawić te konfiguracje w pliku /etc/ansible/ansible.cfglub ~/.ansible.cfglub ansible.cfg(w Twoim bieżącym katalogu)

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

testowano z ansible 2.9.6 w Ubuntu 20.04

Alupotha
źródło