如何在ansible库存文件中设置host_key_checking = false?

时间:2014-04-15 03:59:04

标签: ansible

我想使用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之外的配置变量可以覆盖此值?

6 个答案:

答案 0 :(得分:134)

由于我在2014年回答了这个问题,我已经更新了我的答案,以便更新版本的ansible。

是的,您可以在主机/库存级别(可在newer ansible versions)或全球级别执行此操作:

广告

添加以下内容。

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

<强>宿主

添加以下内容。

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

主机/广告资源选项适用于连接类型ssh而不是paramiko。有些人可能强烈认为库存和主机更安全,因为范围更有限。

<强>全球:

Ansible User Guide - Host Key Checking

  • 您可以在/etc/ansible/ansible.cfg~/.ansible.cfg文件中执行此操作:

    [defaults]
    host_key_checking = False
    
  • 或者你可以设置和env变量(这可能不适用于较新的ansible版本):

    export ANSIBLE_HOST_KEY_CHECKING=False
    

答案 1 :(得分:61)

是的,您可以在库存/主机级别设置此项。

根据已经接受的答案,我认为这是关于如何在库存水平上处理此问题的更好的答案。通过将此不安全设置隔离到此所需的主机(例如测试系统,本地开发机器),我认为这更安全。

您可以在库存级别执行添加

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

到您的主机定义(请参阅Ansible Behavioral Inventory Parameters)。

如果您使用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"
}

如果您想为一组主机执行此操作,请按以下步骤建议将其作为现有组的补充组var,如下所示:

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

[insecuressh:children]
mytestsystems

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

答案 2 :(得分:1)

我无法使用:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'
库存文件中的

。在我的情况下似乎ansible不考虑这个选项(在ubuntu 14.04中来自pip的ansible 2.0.1.0)

我决定使用:

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'

答案 3 :(得分:1)

/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

全部

答案 4 :(得分:0)

在使用ansible ad-hoc命令时,将以下内容添加到ansible配置中即可:

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

Ansible版本

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

答案 5 :(得分:0)

您可以在/etc/ansible/ansible.cfg~/.ansible.cfgansible.cfg(在当前目录中)文件中设置这些配置

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

在ubuntu 20.04中使用ansible 2.9.6进行了测试