如何在无库存清单文件中设置host_key_checking = false?


113

我想使用ansible-playbook命令而不是' vagrant provision'。但是host_key_checking=falsehosts文件中的设置似乎无效。

# 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可以覆盖此值?

Answers:


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'不起作用。
马克·阿布拉莫维茨

6
您的第一个陈述“是,但不在主机/清单级别”是错误的。您可以使用ansible_ssh_common_args='-o StrictHostKeyChecking=no'ansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Shammel Lee

1
在运行我的剧本之前,只有最后一个选项对我有用(导出ANSIBLE_HOST_KEY_CHECKING = False)。
ted-k42

1
“是的,但不在主机/库存级别。” -由我的回答证明是错误的。我什至会说这并不是对如何在库存级别上进行设置的真正答案。
gertvdijk

@gertvdijk我在2014年回答了这个问题。Ansible经过了一系列修订。不再是这种情况了吗?
Rico

68

是的,您可以在清单/主机级别上进行设置。

有了一个已经被接受的答案,我认为这对于在库存级别如何处理这个问题是一个更好的答案。通过将此不安全设置隔离到为此所需的主机(例如测试系统,本地开发计算机),我认为这样做更加安全。

您可以在库存级别执行的操作是添加

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'

4
这是一个更好的答案。
marcv81 '16

该建议对我有用,并且我同意出于安全考虑,应该在项目级别(而不是全局级别)设置此建议。
andrewdcato

1
我包含ansible_ssh_common_args: '-o StrictHostKeyChecking=no'在group_vars文件yml文件中。
g。

4

我无法使用:

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'

确实将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 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

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测试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.