如何在可视库存文件中设置 host_key_check = false?

我想使用 ansible-playbook命令而不是“ vagrant provision”命令。然而,在 hosts文件中设置 host_key_checking=false似乎不起作用。

# 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之外是否有可以覆盖此值的配置变量?

254350 次浏览

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

是的,您可以在主机/库存级别(这在 更新的安塞尔版本上成为可能)或全局级别进行操作:

库存 :

添加以下内容。

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

主持人 :

添加以下内容。

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

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

全球:

可视用户指南-主机密钥检查

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

    [defaults]
    host_key_checking = False
    
  • Or you can setup and env variable (this might not work on newer ansible versions):

    export ANSIBLE_HOST_KEY_CHECKING=False
    

是的,您将 可以设置为库存/主机级别。

有了一个已经被接受的答案,我认为这是一个更好的答案的问题,如何处理这在库存水平。我认为将这种不安全的设置与所需的主机(例如,测试系统、本地开发机器)隔离开来会更加安全。

您可以在库存级别做的是添加

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

或者

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

到主机定义(参见 可感知行为量表参数)。

如果您使用的是 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 vagrant -i <path/to/hosts/file> -m ping
vagrant | SUCCESS => {
"changed": false,
"ping": "pong"
}

如果您想对一组主机执行此操作,建议将其作为现有组的补充 group 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'

在库存文件中。在我的例子中,似乎可能没有考虑这个选项(在 ubuntu 14.04中从 pip 中可能是可能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'

/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

仅此而已

在使用可操作的 ad-hoc 命令时,向可操作的配置添加以下命令:

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

可视化版本

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

您可以在 /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中测试了安塞尔2.9.6