Я использую Ansible 1.5.3 и Git с пересылкой агента ssh (https://help.github.com/articles/using-ssh-agent-forwarding). Я могу войти на сервер, которым управляю с помощью Ansible, и проверить правильность настройки моего подключения к git:
ubuntu@test:~$ 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, но я подозреваю, что многие впервые столкнутся с проблемой в этом сценарии.