Як встановити host_key_checking = false у файлі інвентаризації ansible?


113

Я хотів би використовувати ansible-playbookкоманду замість ' vagrant provision'. Однак, здається, налаштування host_key_checking=falseу hostsфайлі не працює.

# 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

Чи є змінна конфігурація поза Vagrantfileцією, що може замінити це значення?

Відповіді:


182

Через те, що я відповів на це у 2014 році, я оновив свою відповідь, щоб повідомити про новіші версії ansible.

Так, ви можете це зробити на рівні хост / інвентар (що стало можливим на нових версіях безвідмовних ) або глобальному:

інвентар :

Додайте наступне.

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

господар :

Додайте наступне.

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

Параметри хостів / інвентаризації будуть працювати з типом з'єднання, sshа не paramiko. Деякі люди можуть наполегливо стверджувати, що інвентар та хости є більш безпечними, оскільки сфера застосування обмежена.

глобальний:

Посібник з відповідного користувача - Перевірка ключа хоста

  • Ви можете зробити це або в /etc/ansible/ansible.cfgабо ~/.ansible.cfgфайлі:

    [defaults]
    host_key_checking = False
    
  • Або ви можете налаштувати та env змінну (це може не працювати у нових новіших версіях):

    export ANSIBLE_HOST_KEY_CHECKING=False
    

32
Я використовую ansible 1.7.2, і мій досвід свідчить про те, що змінна середовища ANSIBLE_HOST_KEY_CHECKINGпрацює, але -e 'host_key_checking=False'не працює.
Марк Абрамовіц

6
Ваше перше твердження "Так, але не на рівні хостів / інвентарю" є помилковим. Ви можете використовувати ansible_ssh_common_args='-o StrictHostKeyChecking=no'абоansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Shammel Lee

1
Лише останній варіант працював для мене (експорт ANSIBLE_HOST_KEY_CHECKING = Неправдивий) перед запуском моєї книги.
ted-k42

1
"Так, але не на рівні хостів / інвентарю." - Показано помилковим, що підтверджується моєю відповіддю . Я б навіть сказав, що це насправді не відповідь на питання про те, як встановити його на рівні запасів .
gertvdijk

@gertvdijk Я відповів на це в 2014 році. Ansible пережив купу змін. Це вже не так?
Rico

68

Так, ви можете встановити це на рівні інвентаризації / хоста.

При вже прийнятій відповіді я вважаю, що це краща відповідь на питання про те, як впоратися з цим на рівні запасів. Я вважаю це більш безпечним, виділяючи це небезпечне налаштування для необхідних для цього хостів (наприклад, тест-системи, локальні машини для розробки).

Що ви можете зробити на рівні інвентаризації, це додати

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

або

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

до визначення вашого господаря (див. Параметри інвентаризації відповідної поведінки ).

Це буде працювати, якщо ви використовуєте sshтип з'єднання, а не paramikoщось інше).

Наприклад, визначення хост Vagrant виглядатиме як…

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

або

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

Запуск Ansible буде успішним, не змінюючи жодної змінної середовища.

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

Якщо ви хочете зробити це для групи хостів, ось вам запропонувати доповнити групу вар для існуючої групи на зразок цієї:

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

[insecuressh:children]
mytestsystems

[insecuressh:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'

4
Це набагато краща відповідь.
marcv81

Ця пропозиція спрацювала для мене, і я погоджуюся, що це щось, що слід встановити на рівні проекту (а не на глобальному рівні) через проблеми безпеки.
andrewdcato

1
Я включив ansible_ssh_common_args: '-o StrictHostKeyChecking=no'у файл group_vars yml файл.
г.

4

Я не міг користуватися:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

у файлі інвентаризації. Здається, ansible не розглядає цю опцію в моєму випадку (ansible 2.0.1.0 з pip в ubuntu 14.04)

Я вирішив використовувати:

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

Це мені допомогло.

Також ви можете встановити цю змінну в групі замість кожного хоста:

[servers_group:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=/dev/null'

Установка UserKnownHostsFile/ GlobalKnownHostsFileопція /dev/nullтакож працює на насправді. Дивно, що налаштування StrictHostKeyCheckingне працює для вас. Найімовірніше, є якийсь варіант у вашій конфігурації SSH.
gertvdijk

+1 для -o UserKnownHostsFile=/dev/null. Без цього мені просто не вийшло, незалежно від місця та способу, який я вказав ansible_ssh_common_args в інших відповідях.
До Куна

0

У /etc/ansible/ansible.cfgкоментарі рядок:

host_key_check = False

і в /etc/ansible/hostsкоментарі лінія

client_ansible ansible_ssh_host=10.1.1.1 ansible_ssh_user=root ansible_ssh_pass=12345678

Це все


0

Додавання наступних даних до ansible config працює під час використання adible-команд ansible:

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

Відповідна версія

ansible 2.1.6.0
config file = /etc/ansible/ansible.cfg

0

Ви можете встановити ці конфіги або в /etc/ansible/ansible.cfgабо ~/.ansible.cfgабо ansible.cfgфайл (в поточному каталозі)

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

тестовано з ansible 2.9.6 в ubuntu 20.04

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.