Как установить host key checking=false в Ansible inventory file?


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

5 69

5 ответов:

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

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

инвентаризации:

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

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

хоста:

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

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

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

global:

  • вы можете сделать это либо в /etc/ansible/ansible.cfg или ~/.ansible.cfg file:

    [defaults]
    host_key_checking = False
    
  • или вы можете передать его из команды линия:

    ansible-playbook -e 'host_key_checking=False' yourplaybook.yml
    
  • или вы можете настроить и env переменную (это может не работать на более новых версиях ansible):

    export ANSIBLE_HOST_KEY_CHECKING=False
    

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

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

что вы можете сделать на уровне запасов добавить

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

или

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

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

это будет работать при условии, что вы используете ssh тип соединения, а не paramiko или что-то еще).

например, определение бродячего хоста будет выглядеть как...

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"
}

в случае, если вы хотите сделать это для группы хостов, вот предложение сделать его дополнительной группой var для существующей группы следующим образом:

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

[insecuressh:children]
mytestsystems

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

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

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

в файл inventory. Кажется, 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'

на /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

вот и все

добавление следующего в Ansible config работало при использовании Ansible ad-hoc команд:

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

Ansible Version

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