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

Я хотел бы использовать команду 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, которая может переопределить это значение?


person mbdev    schedule 15.04.2014    source источник


Ответы (6)


Поскольку я ответил на этот вопрос в 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
    
person Rico    schedule 15.04.2014
comment
Я использую ansible 1.7.2, и мой опыт показывает, что переменная среды ANSIBLE_HOST_KEY_CHECKING работает, но -e 'host_key_checking=False' не работает. - person Marc Abramowitz; 22.11.2014
comment
Ваше первое утверждение «Да», но не на уровне хостов / инвентаря, неверно. Вы можете использовать ansible_ssh_common_args='-o StrictHostKeyChecking=no' или ansible_ssh_extra_args='-o StrictHostKeyChecking=no' - person Shammel Lee; 10.09.2016
comment
У меня работал только последний вариант (экспорт ANSIBLE_HOST_KEY_CHECKING = False) перед запуском моей пьесы. - person ted-k42; 31.05.2017
comment
Да, но не на уровне хостов / инвентаря. - Показано, что это неверно, что подтверждается моим ответом. Я бы даже сказал, что это не совсем ответ на вопрос, как установить его на уровне inventory. - person gertvdijk; 02.08.2017
comment
@gertvdijk Я ответил на это в 2014 году. В Ansible было внесено множество изменений. Это уже не так? - person Rico; 02.08.2017
comment
Для единственного лайнера я передал переменную окружения с помощью команды ANSIBLE_HOST_KEY_CHECKING=false ansible all -m ping, жаль, что ansible -e ansible_host_key_checking=false all -m ping, похоже, не работает - person mbigras; 09.07.2018
comment
или через параметр командной строки --ssh-common-args, если вы хотите быстро изменить и отладить - person Peter Kahn; 16.03.2020

Yes, you can set this on the inventory/host level.

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

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

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

or

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'

or

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'
person gertvdijk    schedule 22.02.2016
comment
Это гораздо лучший ответ. - person marcv81; 06.04.2016
comment
Это предложение сработало для меня, и я согласен с тем, что это следует устанавливать на уровне проекта (а не на глобальном уровне) из соображений безопасности. - person andrewdcato; 05.05.2017
comment
Я включил ansible_ssh_common_args: '-o StrictHostKeyChecking=no' в файл yml файла group_vars. - person g .; 18.09.2017

Я не мог использовать:

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'
person vskubriev    schedule 21.04.2016
comment
Установка параметра UserKnownHostsFile / GlobalKnownHostsFile на /dev/null также действительно работает. Странно, что настройка StrictHostKeyChecking у вас не работает. Скорее всего, причиной является какая-то опция в вашей конфигурации SSH. - person gertvdijk; 21.06.2016
comment
+1 за -o UserKnownHostsFile=/dev/null. Без него также просто не работало для меня, независимо от местоположения и способа, которые я указал ansible_ssh_common_args, изложенные в других ответах. - person Till Kuhn; 11.02.2020

В /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

Это все

person user8759294    schedule 11.10.2017

Добавление следующего в конфигурацию 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
person dina    schedule 05.10.2018

Вы устанавливаете эти конфигурации либо в файле /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

person Alupotha    schedule 26.07.2020