在 ansible.cfg 的 [defaults] 段落中设置 private_key_file 参数指向私钥文件绝对路径,可实现 Ansible 自动加载密钥免密登录。此方法适用于固定控制节点且私钥权限受控的场景,风险在于配置文件泄露可能导致密钥路径暴露。
先说结论:通过修改 ansible.cfg 配置私钥路径是持久化免密方案,适合标准化运维环境,但需严格限制私钥文件权限。
- 适合:控制节点固定、批量管理多台主机、希望减少命令行参数的场景。
- 先准备:确认 SSH 私钥文件存在、权限设置为 600、ansible.cfg 文件可写。
- 验收:执行 ansible ping 模块无密码提示且返回 SUCCESS 状态。
命令速用版
[defaults]
private_key_file = /home/user/.ssh/id_rsa
将上述内容保存为当前目录下的 ansible.cfg 或 /etc/ansible/ansible.cfg。
为什么会这样
Ansible 默认通过 SSH 协议连接受管节点,未配置密钥路径时会尝试 SSH_agent 或提示输入密码。
配置 private_key_file 后,Ansible 底层 SSH 连接插件会直接读取指定路径的私钥进行认证,跳过交互式密码输入环节。这是 Ansible 配置优先级中文件配置层级的标准行为。
分步处理
1. 检查私钥文件权限:执行 chmod 600 /path/to/private_key,确保只有所有者可读写。
2. 创建或编辑配置文件:在当前项目目录创建 ansible.cfg,避免影响全局配置。
3. 写入配置内容:在 [defaults] 下添加 private_key_file = 你的私钥绝对路径。
4. 确认 Inventory 配置:确保 ansible 命令能读取到正确的主机列表,通常配合 inventory 文件使用。
怎么验证是否生效
执行命令 ansible all -m ping -v,观察输出日志。
若显示 SUCCESS 且无 Password: 提示符,说明配置生效。若出现 Permission denied 或 WARNING: UNPROTECTED PRIVATE KEY FILE,需检查文件权限。
常见坑
私钥文件权限过大:SSH 拒绝加载权限为 644 或 777 的私钥,必须为 600。
配置文件优先级混淆:当前目录 ansible.cfg 优先级高于 /etc/ansible/ansible.cfg,需确认编辑的是生效文件。
私钥带密码短语:若私钥本身有 passphrase,仅配置路径仍会提示输入,需配合 ssh-agent 使用。
常见问题
命令行指定私钥和配置文件哪个优先级高?
命令行参数 `--private-key` 优先级高于 ansible.cfg 配置。
如何确认当前使用的配置文件路径?
执行 ansible `--version` 命令,输出第一行会显示 config file 所在路径。
配置后仍然提示输入密码怎么办?
检查私钥是否有 passphrase,若有需先 ssh-add 加载到代理,或检查目标主机 authorized_keys 是否配置正确。
参考来源
Ansible Official Documentation, Ansible Configuration Settings, https://docs.ansible.com/ansible/latest/reference_appendices/config.html