如何在 ansible.cfg 中配置 SSH 私钥路径避免每次输入密码

文章导读
在 ansible.cfg 的 [defaults] 段落中设置 private_key_file 参数指向私钥文件绝对路径,可实现 Ansible 自动加载密钥免密登录。此方法适用于固定控制节点且私钥权限受控的场景,风险在于配置文件泄露可能导致密钥路径暴露。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

在 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 配置优先级中文件配置层级的标准行为。

如何在 ansible.cfg 中配置 SSH 私钥路径避免每次输入密码

分步处理

1. 检查私钥文件权限:执行 chmod 600 /path/to/private_key,确保只有所有者可读写。

2. 创建或编辑配置文件:在当前项目目录创建 ansible.cfg,避免影响全局配置。

3. 写入配置内容:在 [defaults] 下添加 private_key_file = 你的私钥绝对路径。

4. 确认 Inventory 配置:确保 ansible 命令能读取到正确的主机列表,通常配合 inventory 文件使用。

怎么验证是否生效

执行命令 ansible all -m ping -v,观察输出日志。

如何在 ansible.cfg 中配置 SSH 私钥路径避免每次输入密码

若显示 SUCCESS 且无 Password: 提示符,说明配置生效。若出现 Permission denied 或 WARNING: UNPROTECTED PRIVATE KEY FILE,需检查文件权限。

常见坑

私钥文件权限过大:SSH 拒绝加载权限为 644 或 777 的私钥,必须为 600。

配置文件优先级混淆:当前目录 ansible.cfg 优先级高于 /etc/ansible/ansible.cfg,需确认编辑的是生效文件。

私钥带密码短语:若私钥本身有 passphrase,仅配置路径仍会提示输入,需配合 ssh-agent 使用。

如何在 ansible.cfg 中配置 SSH 私钥路径避免每次输入密码

常见问题

命令行指定私钥和配置文件哪个优先级高?

命令行参数 `--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