Im использует Ansible 1.5.3 и Git с пересылкой агента ssh (https://help.github.com/articles/using-ssh-agent-forwarding). Я могу войти на сервер, с которым я управляю с помощью Ansible, и проверить правильность настройки моего подключения к Git:
[email protected]:~$ ssh -T [email protected]
Hi gituser! You've successfully authenticated, but GitHub does not provide shell access.
Я также могу клонировать и обновлять один из моих репозиториев, используя эту учетную запись, поэтому моя конфигурация Git выглядит хорошо и использует пересылку ssh при входе на мой сервер непосредственно через ssh.
Проблема: когда я пытаюсь выполнить тот же тест, показанный выше, используя командный модуль Ansible. Он не работает с "Permission denied". Часть выходного сигнала Ansible (с подробным протоколированием) выглядит следующим образом:
failed: [xxx.xxxxx.com] => {"changed": true, "cmd": ["ssh", "-T", "[email protected]"], "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 [email protected]
Вопрос: почему все работает правильно, когда я вручную регистрируюсь через ssh и запускаю команду, но не удается, когда одна и та же команда запускается как один и тот же пользователь через Ansible?
Я отправлю ответ в ближайшее время, если меня никто не будет бить. Хотя я использую Git для демонстрации проблемы, это может произойти с любым модулем, который зависит от пересылки агента ssh. Это не относится к Ansible, но я подозреваю, что многие впервые столкнутся с проблемой в этом сценарии.