Переадресация агента SSH через Ansible
Я использую 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. Сбой с «Отказано в доступе». Часть вывода 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, но я подозреваю, что многие сначала столкнутся с проблемой в этом сценарии.