2014-01-29 4 views
31

Я настроил все, что мог найти, но все же клонирует репо из GitHub, зависает процесс подготовки.GIT over SSH in Ansible зависает, в то время как перенаправление ssh-agent настроено

у меня есть:

  • сервер в known_hosts
  • .ssh/конфигурации

    Host github.com 
        ForwardAgent yes 
        StrictHostKeyChecking no 
    
  • скопировали секретный ключ

  • открытый ключ в authorized_keys
  • эта команда как vagrant Пользователь
  • пьеса:

    - name: Checkout from git 
        git: [email protected]:username/repositoryname.git dest=/srv/website 
    
+6

Удостоверьтесь, что вы не выполняете эту задачу с помощью 'sudo', потому что она прерывает перенаправление агентов. –

+0

@techtonik, даже если для пользователя root задана переадресация? – cvsguimaraes

+0

@cvsguimaraes forwarding - это цепочка от вашего порта 'ssh-agent' до удаленного SSH-порта, и переход через' sudo' прерывает эту цепочку, если вы не обойдете это. См. Http://stackoverflow.com/a/24134109/239247 –

ответ

14

Я хочу поделиться ответ, который работал на меня:

https://groups.google.com/forum/#!msg/ansible-project/u6o-sWynMjo/69UwJfJPq7cJ - от анзибль группы Google

Для анзибль, ssh-add сначала загружать ключи ssh на ваш хост-компьютер. Затем используйте «ssh» в качестве типа соединения с включенной переадресацией.

Такие, как:

$ ssh-add 
$ export ANSIBLE_TRANSPORT="ssh" 
$ export ANSIBLE_SSH_ARGS="-o ForwardAgent=yes" 

Смотрите руководство по SSH-добавить для запуска агента.

В анзибль Документы для ssh-args являются http://docs.ansible.com/intro_configuration.html#ssh-args

7

это работает для меня

- name: ensure known hosts 
    shell: touch ~/.ssh/known_hosts 
- name: remove github.com from known host 
    shell: ssh-keygen -R github.com 
    # >> instead of > to keep existing known_hosts file 
- name: ensure github.com in known host 
    shell: ssh-keyscan -H github.com >> ~/.ssh/known_hosts 
+14

нет необходимости, поскольку git ansible module имеет флаг accept_hostkey, чтобы обеспечить его. Просто включите его. – kaji

+1

Модуль для сохранения файла/etc/ssh/ssh_known_hosts https://github.com/bfmartin/ansible-sshknownhosts – jitter

60

Просто расширить ответ tillda, в том, что конфигурация может быть помещен в файл ansible.cfg вместе с вашим PlayBook. например:

ansible.cfg

[defaults] 
transport = ssh 

[ssh_connection] 
ssh_args = -o ForwardAgent=yes 

Я бы сказал, что это лучше сделать, чем установка в качестве переменной окр, а поместив его в файл конф является более декларативным, а также сведет к минимуму шаги, необходимые для других людей, с которыми вы можете работать, чтобы идти с проектом.

Conf документы: http://docs.ansible.com/intro_configuration.html#the-ansible-configuration-file

Пример конфигурации файла: https://raw.github.com/ansible/ansible/devel/examples/ansible.cfg

+0

Согласен. Спасибо за это. –

+0

это сработало для меня. благодаря! – bcherny

+1

не работает для меня все еще застрял – holms

0

У меня была ошибка:

bitbucket.org имеет неизвестный HOSTKEY.Установите accept_hostkey Истина или вручную добавить HOSTKEY до запуска модуля GIT

мне пришлось добавить параметр accept_hostkey к моей команде мерзавца модуля:

сборник пьес:

tasks: 
    - name: clone 
     git: [email protected]:robusta-code/xyz.git 
      dest=/app 
      accept_hostkey=yes 

анзибль. cfg

[ssh_connection] 
ssh_args = -o ForwardAgent=yes 
1

Добавить в ansible.cfg следующий параметр:

[defaults] 
sudo_flags=-HE 
1

В моем случае проблема была в строке хранилища. Я имел Bitbucket частное хранилище установить в качестве:

мерзавца @ ТМР ...

, но это должно быть:

SSH: // мерзавец @ ТМР ...

Обратите внимание на тонкое отсутствие префикса «ssh». Странная часть заключается в том, что если я буду клонировать репозиторий github без «ssh», он отлично работает!