![Ansible 不尊重“ssh-agent”?](https://linux22.com/image/753992/Ansible%20%E4%B8%8D%E5%B0%8A%E9%87%8D%E2%80%9Cssh-agent%E2%80%9D%EF%BC%9F.png)
我似乎遇到了 Ansible 未使用我的 SSH 代理缓存的问题。我运行了以下命令:
eval `ssh-agent`
ssh-add /tmp/key
然后我成功地从我的库存中登录到其中一台主机:
ssh -i /tmp/key [email protected]
当我在 Windows 机器上的 WSL 中使用 ansible 时,以下内容以奇怪的单行三重询问结尾(我的库存中各一个)
ansible --key-file /tmp/key -i ./hosts all -m ping
输出:
Enter passphrase for key '/tmp/key': Enter passphrase for key '/tmp/key': Enter passphrase for key '/tmp/key':
repo | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
"unreachable": true
}
follower | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
"unreachable": true
}
leader | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
"unreachable": true
}
我相信 Ansible 应该使用 Paramiko 进行 SSH,但我认为它无论如何都会与我的 SSH 代理通信。有人猜为什么这不起作用吗?
如果有必要的话,它也可以在 Windows 10 上的 WSL 上运行。
以下是带有“-vvv”的输出:
ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/tmp/key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/mnt/c/Users/me/.ansible/cp/58691c2f88 1.2.3.4 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
从命令行运行时超时
答案1
不指定密钥文件,Ansible 将简单地运行并使用代理,但是通过提供密钥,您告诉 Ansible 直接使用该密钥而不是代理。
答案2
完全删除密码会删除提示,但我继续收到相同的错误,因此可能是在 Ansible 无法向远程主机进行身份验证时出现这种情况?
呃。PEBCAK。问题是 Ansible 在这里没有使用正确的用户名。
对于其他人,我的解决方法是在清单中指定用户:
all:
vars:
ansible_user: "ec2-user"
hosts:
leader:
ansible_host: 1.2.3.1
follower:
ansible_host: 1.2.3.2
repo:
ansible_host: 1.2.3.3