如何在 ansible 库存文件中设置 host_key_checking=false?
Posted
技术标签:
【中文标题】如何在 ansible 库存文件中设置 host_key_checking=false?【英文标题】:How to set host_key_checking=false in ansible inventory file? 【发布时间】:2014-05-29 06:11:49 【问题描述】:我想使用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
之外是否有可以覆盖此值的配置变量?
【问题讨论】:
【参考方案1】:由于我在 2014 年回答了这个问题,我已经更新了我的答案以考虑到 ansible 的更新版本。
是的,您可以在主机/库存级别(这在 newer ansible versions 上成为可能)或全局级别进行:
库存:
添加以下内容。
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
主持人:
添加以下内容。
ansible_ssh_extra_args='-o StrictHostKeyChecking=no'
hosts/inventory 选项适用于连接类型ssh
而不是paramiko
。有些人可能会强烈认为库存和主机更安全,因为范围更有限。
全球:
Ansible User Guide - Host Key Checking
您可以在/etc/ansible/ansible.cfg
或~/.ansible.cfg
文件中执行此操作:
[defaults]
host_key_checking = False
或者您可以设置和环境变量(这可能不适用于较新的 ansible 版本):
export ANSIBLE_HOST_KEY_CHECKING=False
【讨论】:
我使用的是 ansible 1.7.2,我的经验是环境变量ANSIBLE_HOST_KEY_CHECKING
有效,但 -e 'host_key_checking=False'
无效。
您的第一句话“是的,但不在主机/库存级别”是错误的。您可以使用ansible_ssh_common_args='-o StrictHostKeyChecking=no'
或ansible_ssh_extra_args='-o StrictHostKeyChecking=no'
在运行我的剧本之前,只有最后一个选项对我有用(导出 ANSIBLE_HOST_KEY_CHECKING=False)。
“是的,但不在主机/库存级别。” -- 被证明是错误的,由my answer 证明。我什至会说这并不是关于如何在 inventory 级别上设置它的问题的真正答案。
@gertvdijk 我在 2014 年回答了这个问题。Ansible 经历了很多修改。现在不是这样了吗?【参考方案2】:
是的,您可以在库存/主机级别设置。
有了已经接受的答案,我认为这是对如何在库存级别处理此问题的更好答案。我认为通过将这种不安全的设置隔离到所需的主机(例如测试系统、本地开发机器)来更安全。
您可以在库存级别做的就是添加
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"
如果您想为一组主机执行此操作,建议将其作为现有组的补充组变量,如下所示:
[mytestsystems]
test[01:99].example.tld
[insecuressh:children]
mytestsystems
[insecuressh:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
【讨论】:
这是一个更好的答案。 这个建议对我有用,我同意出于安全考虑,这应该在项目级别(而不是全局级别)设置。 我在 group_vars 文件的 yml 文件中包含了ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
。【参考方案3】:
我无法使用:
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 配置中的某个选项。
+1 表示-o UserKnownHostsFile=/dev/null
。没有它也对我不起作用,不管我在其他答案中概述的ansible_ssh_common_args
的位置和方式。【参考方案4】:
在/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
就是这样
【讨论】:
【参考方案5】:在使用 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
【讨论】:
【参考方案6】:您可以在 /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
在 ubuntu 20.04 中使用 ansible 2.9.6 测试
【讨论】:
以上是关于如何在 ansible 库存文件中设置 host_key_checking=false?的主要内容,如果未能解决你的问题,请参考以下文章