Se bloquea GIT sobre SSH en Ansible, aunque se haya configurado el reenvío ssh-agent

He configurado todo lo que pude encontrar, pero aún clonando un repository de GitHub se cuelga el process de aprovisionamiento.

Yo tengo:

  • server en known_hosts
  • .ssh / config

    Host github.com ForwardAgent yes StrictHostKeyChecking no 
  • key privada copyda

  • la key pública está en authorized_keys
  • el command se ejecuta como un usuario vagrant
  • la obra es:

     - name: Checkout from git git: repo=git@github.com:username/repositoryname.git dest=/srv/website 

Solo para ampliar la respuesta de tillda, esa configuration puede colocarse en un file ansible.cfg junto con su libro de jugadas. p.ej:

ansible.cfg

 [defaults] transport = ssh [ssh_connection] ssh_args = -o ForwardAgent=yes 

Diría que es mejor hacer eso que establecerlo como una variable env, ya que colocarlo en un file conf es más declarativo y también minimizará los pasos necesarios para que otras personas con las que pueda estar trabajando continúen con un proyecto.

Documentos de Conf: http://docs.ansible.com/intro_configuration.html#the-ansible-configuration-file

Archivo de configuration de ejemplo: https://raw.github.com/ansible/ansible/devel/examples/ansible.cfg

Quiero compartir la respuesta que funcionó para mí:

https://groups.google.com/forum/#!msg/ansible-project/u6o-sWynMjo/69UwJfJPq7cJ – Desde Ansible Google Group

Para ansible, ssh-add para cargar las keys ssh en su máquina host primero. Luego use "ssh" como tipo de connection con reenvío habilitado.

Como:

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

Consulte el manual de ssh-add para ejecutar el agente.

Los documentos de Ansible para ssh-args son http://docs.ansible.com/intro_configuration.html#ssh-args

esto funciona para mí

 - 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 

Agregue a ansible.cfg el siguiente parámetro:

 [defaults] sudo_flags=-HE 

En mi caso, el problema fue la cadena del repository. Tenía un repository privado bitbucket establecido como:

git @ tsrs …

pero debería ser:

ssh : // git @ tsrs …

Observe la sutil ausencia del prefijo "ssh". La parte extraña es que si clono un repository de Github sin el "ssh", ¡funciona bien!

Tuve un error:

bitbucket.org tiene una key de host desconocida. Establezca accept_hostkey en True o agregue manualmente la key de host antes de ejecutar el module de git

Tuve que agregar un parámetro accept_hostkey a mi command del module git:

libro de jugadas:

 tasks: - name: clone git: repo=git@bitbucket.org:robusta-code/xyz.git dest=/app accept_hostkey=yes 

ansible.cfg

 [ssh_connection] ssh_args = -o ForwardAgent=yes