我是 ansible 新手,但在通过 ansible 访问多个主机时遇到了基本问题。我可以通过 ssh 访问所有主机,如果我使用 ansible 定位库存中的任何特定主机,也可以访问所有主机。它成功访问了我的其中一台主机,但无法访问其他所有主机。
如果我运行:
ansible all -i inventory.yml -u oytal -m ping
它返回:
192.168.1.90 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
192.168.1.21 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: [email protected]: Permission denied (publickey).",
"unreachable": true
}
192.168.1.20 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: [email protected]: Permission denied (publickey).",
"unreachable": true
}
192.168.1.100 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: [email protected]: Permission denied (publickey).",
"unreachable": true
}
无法访问的主机并不一致,我调整了主机的顺序,甚至删除了成功的主机,但它可以访问其他主机之一,但其余主机仍然会失败。
我的库存:
---
all:
hosts:
192.168.1.90:
192.168.1.21:
192.168.1.20:
192.168.1.100:
答案1
权限被拒绝(公钥)
运行时(和其他主机)意味着 192.168.1.21(和其他主机)上的 sshd默认无法获取从 192.168.1.21(和其他主机)运行 ssh 命令的用户的公钥。ssh [email protected]
/home/oytal/.ssh/authorized_keys
造成这种情况的原因可能有很多。确保 ssh 命令有效
外壳> ssh[电子邮件保护]
接下来,确保 Ansible 使用正确的私钥(请参阅 `ansible-doc -t connection ssh)。尝试手动设置。例如
shell> ANSIBLE_PRIVATE_KEY_FILE=$HOME/.ssh/id_rsa ansible 192.168.1.21 -i inventory.yml -u oytal -m ping
检查清单和 Ansible 配置
shell> ansible-config dump
如果这没有帮助,请查看其他权限被拒绝(公钥)答案解释了错误的可能原因。
答案2
我终于找到了解决问题的方法。我觉得自己有点愚蠢,但这是因为我的 id_ed25519 被加密了。
我输入以下命令来修复该问题:
ssh-agent bash
ssh-add /home/$USER/.ssh/id_ed25519
答案3
解决方案:
“首先登录并注销所有远程服务器。然后,使用 ansible ping 到远程服务器。”
我也无法 ping 通多个远程服务器,因此我执行了上述解决方案。然后,我可以 ping 通所有远程服务器。
我不知道背后发生了什么,但我猜我们需要先将主服务器的指纹留给所有远程服务器,然后再使用 ansible ping 到远程服务器。