Ansible 不尊重“ssh-agent”?

Ansible 不尊重“ssh-agent”?

我似乎遇到了 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                             

相关内容