我使用的是带有 ssh 代理转发(https://help.github.com/articles/using-ssh-agent-forwarding)的 Ansible1.5.3和 Git。我可以登录到我正在管理的服务器,并测试我到 git 的连接是否配置正确:
ubuntu@test:~$ ssh -T git@github.com
Hi gituser! You've successfully authenticated, but GitHub does not provide shell access.
我还可以使用这个帐户克隆和更新我的一个回购协议,这样我的 git 配置看起来不错,当我直接通过 ssh 登录到我的服务器时使用 ssh 转发。
问题: 当我使用 Ansible 命令模块尝试上面显示的相同测试时。它以“拒绝许可”失败。Anble 输出的一部分(使用详细日志记录)如下所示:
failed: [xxx.xxxxx.com] => {"changed": true, "cmd": ["ssh", "-T", "git@github.com"], "delta": "0:00:00.585481", "end": "2014-06-09 14:11:37.410907", "rc": 255, "start": "2014-06-09 14:11:36.825426"}
stderr: Permission denied (publickey).
下面是运行这个命令的简单剧本:
- hosts: webservers
sudo: yes
remote_user: ubuntu
tasks:
- name: Test that git ssh connection is working.
command: ssh -T git@github.com
问题是: 为什么当我通过 ssh 手动登录并运行命令时,一切都正常工作,但是当同一个命令通过 Ansible 和同一个用户一起运行时,一切都失败了?
如果没有其他人抢在我前面,我将很快公布答案。尽管我使用 git 来演示这个问题,但它可能发生在任何依赖于 ssh 代理转发的模块中。这并不是 Ansible 特有的问题,但我怀疑,在这种情况下,许多人首先会遇到这个问题。