从 Puppet 迁移到 Ansible。我喜欢它无需代理且由 SSH 驱动。我刚刚设置了两个测试虚拟机。一个用作 Ansible 服务器(是的,有点过头了),另一个用作示例客户端(随机 Linux 服务器)。我们所有的服务器都只使用公私钥对身份验证。这对于 Ansible 来说最初有点问题。我非常(几乎确定)Ansible 可以使用密钥对,但我似乎找不到一个很好的示例来说明如何使用。
我通过以下方式专门为 Ansible 创建了一个密钥对
ssh-keygen -t rsa -b 4096
然后我将公钥复制到客户端。当我通过标准 SSH 测试时,密钥对身份验证工作得很好。现在来测试 Ansible。我将测试客户端放在 Ansible hosts 文件中,并使用唯一看起来一半正确的语法来使密钥对工作。
[TEST]
10.0.0.5 ansible_ssh_private_key_file=~/.ssh/id_rsa
当我尝试运行像这样的基本测试模块时
sudo ansible all -m ping
我收到以下错误消息
10.0.0.5 | FAILED => SSH Error: Permission denied (publickey,password).
while connecting to 10.0.0.5:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
显然,我对如何设置 Ansible 以使用密钥对的语法或概念理解存在缺陷。有什么建议吗?谢谢
答案1
没错!它就在 ansible 配置文件 (/etc/ansible/ansible.cfg) 中
# if set, always use this private key file for authentication, same as
# if passing --private-key to ansible or ansible-playbook
private_key_file = /home/<username>/.ssh/id_rsa
现在一切似乎都正常了
10.0.0.5 | success >> {
"changed": false,
"ping": "pong"
}
答案2
如果您再次遇到 ansible 的 SSH 问题,请将 -vvv 添加到命令行选项,它会告诉您出了什么问题。