ansible批量接入新节点需自动化ssh密钥校验:方案一为可信内网全局禁用host_key_checking;方案二为预注入指纹至known_hosts,兼顾安全与自动化,并需同步完成免密通道、动态清单和python环境部署。

Ansible 默认开启 SSH 主机密钥校验(host_key_checking = True),这是安全机制,但对批量接入新节点(尤其是云上动态创建、裸金属初装或大规模机房交付场景)会造成阻塞:每台新主机首次连接时,Ansible 会因无法自动确认远程主机指纹而报错中断,例如:
要实现“一键秒级接入成百上千节点”,核心不是绕过安全,而是让密钥校验过程**完全自动化、无交互、可预置、不依赖人工 ssh 登录**。以下是经过生产验证的两种主力方案,按推荐优先级排序:
方案一:全局禁用校验(适用于可信内网环境)
在 Ansible 工作目录下配置 ansible.cfg,覆盖默认行为:
- 确保配置文件位于当前执行目录(非
/etc/ansible/ansible.cfg,避免影响其他项目) - 写入以下内容:
[defaults] host_key_checking = False timeout = 10 inventory = inventory
- 该配置使所有后续
ansible或ansible-playbook命令跳过指纹比对,直接建立 SSH 连接 - 适用场景:封闭机房、VPC 内网、CI/CD 流水线中已知可控的新建节点池
方案二:预注入指纹(兼顾安全与自动化)
不关闭校验,而是提前将目标节点的 SSH 公钥指纹写入控制端的 ~/.ssh/known_hosts,实现“静默信任”:
- 获取目标节点指纹(可通过 API、CMDB 或批量脚本拉取):
ssh-keyscan -t ecdsa,rsa 192.168.100.101 192.168.100.102 ... >> ~/.ssh/known_hosts - 若使用域名或别名,需配合
ssh-keyscan -H(哈希化存储)或确保/etc/hosts解析准确 - 也可在 playbook 开头用
community.general.known_hosts模块动态添加,适合节点 IP 动态变化的云环境 - 优势:保留 SSH 安全基线,防止中间人攻击,符合等保/合规要求
配套关键动作(缺一不可)
仅关校验还不够,秒级接入还需同步完成以下三件事:
-
免密 SSH 通道就绪:用
ssh-copy-id或 Ansible 的authorized_key模块批量部署公钥,确保无需密码即可登录 -
主机清单结构化:用动态 Inventory(如
script或yaml插件)对接 CMDB/API,避免手动维护千行 hosts 文件 -
Python 环境兜底:新节点可能无 Python 或路径异常,可在接入 playbook 中首步运行
raw模块安装基础环境,再切到command/shell
真正实现“一键秒级”,本质是把“人点 yes → 机器记指纹 → 复制密钥 → 验证连通 → 执行任务”这一串动作,全部转化为幂等、可并行、可回滚的代码逻辑。禁用校验只是其中一环,完整链路跑通,千台节点接入才真正进入分钟级甚至秒级节奏。











