我正在使用 Ansible 1.5.3 和带有 ssh 代理转发的 Git ( https://help.github.com/articles/using-ssh-agent-forwarding )。我可以登录到我正在使用 Ansible 管理的服务器并测试我与 git 的连接是否配置正确:
ubuntu@test:~$ ssh -T git@github.com
Hi gituser! You've successfully authenticated, but GitHub does not provide shell access.
我还可以使用此帐户克隆和更新我的一个存储库,因此当我通过 ssh 直接登录到我的服务器时,我的 git 配置看起来不错并使用 ssh 转发。
问题:当我使用 Ansible 命令模块尝试上面显示的相同测试时。它因“权限被拒绝”而失败。Ansible 输出的一部分(带有详细日志记录)如下所示:
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 特有的,但我怀疑很多人会在这种情况下首先遇到这个问题。