Как установить host_key_checking = false в доступном файле инвентаризации?

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этому значению?

mbdev
источник

Ответы:

182

В связи с тем, что я ответил на это в 2014 году, я обновил свой ответ, чтобы учесть более свежие версии ansible.

Да, вы можете сделать это на уровне хоста / инвентаря (что стало возможным в более новых версиях ansible ) или на глобальном уровне:

инвентарь :

Добавьте следующее.

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

хост :

Добавьте следующее.

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

Параметры хостов / инвентаря будут работать с типом подключения, sshа не с ним paramiko. Некоторые люди могут категорически возразить, что инвентарь и хосты более безопасны, потому что объем более ограничен.

Глобальный:

Руководство пользователя Ansible - Проверка ключа хоста

  • Сделать это можно в файле /etc/ansible/ansible.cfgили ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    
  • Или вы можете настроить и переменную env (это может не работать в более новых версиях ansible):

    export ANSIBLE_HOST_KEY_CHECKING=False
    
Рико
источник
32
Я использую ansible 1.7.2, и, по моему опыту, переменная среды ANSIBLE_HOST_KEY_CHECKINGработает, но -e 'host_key_checking=False'не работает.
Marc Abramowitz
6
Ваше первое утверждение «Да, но не на уровне хостов / инвентаря» неверно. Вы можете использовать ansible_ssh_common_args='-o StrictHostKeyChecking=no'илиansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Шаммель Ли
1
У меня работал только последний вариант (экспорт ANSIBLE_HOST_KEY_CHECKING = False) перед запуском моей пьесы.
ted-k42
1
«Да, но не на уровне хостов / инвентаря». - Доказано моим ответом как ложное . Я бы даже сказал, что это не совсем ответ на вопрос, как установить его на уровне инвентаря .
gertvdijk 02
@gertvdijk Я ответил на это в 2014 году. В Ansible было внесено множество изменений. Это уже не так?
Rico
68

Да, вы можете установить это на уровне инвентаря / хоста.

Имея уже принятый ответ, я думаю, что это лучший ответ на вопрос о том, как справиться с этим на уровне инвентаря. Я считаю это более безопасным, если изолировать этот небезопасный параметр от хостов, необходимых для этого (например, тестовых систем, локальных машин разработки).

Что вы можете сделать на уровне инвентаря, так это добавить

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

или

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

к определению вашего хоста (см. Параметры Ansible Behavioral Inventory ).

Это будет работать при условии, что вы используете 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'
gertvdijk
источник
4
Это гораздо лучший ответ.
marcv81
Это предложение сработало для меня, и я согласен с тем, что это следует устанавливать на уровне проекта (а не на глобальном уровне) из соображений безопасности.
andrewdcato
1
Я включил ansible_ssh_common_args: '-o StrictHostKeyChecking=no'в yml файл group_vars.
г.
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'
vskubriev
источник
Установка 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

Вот и все

user8759294
источник
0

Добавление следующего в конфигурацию ansible работало при использовании специальных команд ansible:

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

Версия Ansible

ansible 2.1.6.0
config file = /etc/ansible/ansible.cfg
dnafication
источник
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

Alupotha
источник