You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible Playbook中忽略SSH主机密钥检查?

解决Ansible Playbook SSH主机密钥检查失效的问题

如果你试过常规的三种方法(命令行参数、环境变量、ansible.cfg配置)都没生效,大概率是配置加载优先级、语法细节或者外部SSH配置干扰导致的,以下是针对性的排查和解决步骤:

一、先确认现有配置是否真的被加载

  • 检查ansible.cfg的实际加载路径:执行ansible --version,输出里会显示ansible config file的具体路径,确保你修改的是这个路径下的配置文件,而非其他位置的无效文件。
  • 验证环境变量生效情况:执行echo $ANSIBLE_HOST_KEY_CHECKING,如果输出不是False,说明环境变量未正确设置——要么是export后未重新加载shell(比如新开终端),要么是拼写错误(变量名是全大写的ANSIBLE_HOST_KEY_CHECKING)。
  • 命令行参数的引号问题:如果使用zsh等非bash shell,单引号可能导致参数解析异常,换成双引号试试:
    ansible-playbook play.yml --ssh-common-args="-o StrictHostKeyChecking=no"
    

二、强制覆盖的生效方案

1. 在Playbook内直接指定SSH参数

绕过外部配置,直接在play里定义变量,优先级最高:

- hosts: your_target_hosts
  vars:
    ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
  tasks:
    # 你的任务内容

加上UserKnownHostsFile=/dev/null可以彻底跳过本地known_hosts文件的检查,避免旧密钥残留导致的问题。

2. 排查系统/用户级SSH配置干扰

如果控制机或目标主机的~/.ssh/config、/etc/ssh/ssh_config里有StrictHostKeyChecking yes的全局配置,会直接覆盖Ansible的参数。可以临时在命令行追加参数强制覆盖:

ansible-playbook play.yml --ssh-common-args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null"

3. 检查Ansible版本兼容性

Ansible 2.9及更早版本对部分SSH参数的解析存在bug,执行ansible --version查看版本,如果是旧版本,建议升级到2.10+的稳定版,很多配置兼容性问题在新版本里已经修复。

三、快速验证方案

写一个极简测试playbooktest_ssh.yml:

- hosts: your_target_hosts
  gather_facts: no
  tasks:
    - name: Test SSH connection
      command: echo "Connection success"

用强制参数执行:

ansible-playbook test_ssh.yml --ssh-common-args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"

如果这次能正常执行不弹出密钥确认,说明之前的问题是配置加载或干扰导致的,再针对性调整即可。

内容的提问来源于stack exchange,提问作者code.coderpy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:42:07