禁用对剧本定义的主机密钥检查

dju*_*rez 2 ansible

关于如何在ansible清单文件中设置host_key_checking = false?我想知道是否可以更改剧本定义中的此设置。

我的剧本是自动调用的,我无法export在启动剧本之前设置 ENV 变量。

这是我尝试过的:

---
- hosts: localhost
  environment:
    ANSIBLE_HOST_KEY_CHECKING: false
  roles:
    - including_vars
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在 playbook 任务期间添加主机,则会收到以下错误:

无法到达!=> {"changed": false, "msg": "无法通过 ssh 连接到主机: 主机密钥验证失败。\r\n", "unreachable": true}

这似乎表明环境变量没有被使用。

关于如何在运行时更改此设置的任何想法?

tec*_*raf 6

您可以在戏剧的 vars 部分设置ansible_host_key_checking / :ansible_ssh_host_key_checking

---
- hosts: localhost
  vars:
    ansible_host_key_checking: false
  roles:
    - including_vars
Run Code Online (Sandbox Code Playgroud)

重要提示:在启用管道功能的情况下进行测试时,请给 SSH 时间以使持久连接过期,否则更改的设置可能尚未应用。


您还可以创建一个内存清单并host_key_checking针对该清单运行您的真实游戏(这也适用于 2.5 之前的 Ansible 版本):

----
- hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - add_host:
        name: my_host
        ansible_host: myhost.example.com
        host_key_checking: false

- hosts: my_host
  tasks:
    - ping:
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这两个建议,但最终唯一有效的是 `ansible_ssh_extra_args: "-o StrictHostKeyChecking=no"` (6认同)