Ansible y Git Permiso denegado (publickey) en Git Clone

Tengo un libro de jugadas donde trato de clonar de un repository privado (GIT) a un server.

Configuré el reenvío ssh y cuando entro al server e bash clonar manualmente desde el mismo repository, funciona correctamente. Sin embargo, cuando uso ansible para clonar el repository en el server, falla con "Permiso de key pública denegada".

Este es mi libro de deploy.yml :

 --- - hosts: webservers remote_user: root tasks: - name: Setup Git repo git: repo={{ git_repo }} dest={{ app_dir }} accept_hostkey=yes 

Así es como se ve mi ansible.cfg :

 [ssh_args] ssh_args = -o FowardAgent=yes 

También puedo realizar todas las demás tareas en mis libros de jugadas (operaciones de OS, instalaciones).

Yo he tratado:

  • Especificando el indicador sshAgentForwarding en ansible.cfg en el server (ansible.cfg en el mismo directory que el libro de estrategias) usando:

    ssh_args = -o ForwardingAgent = yes

  • usado become: false para ejecutar el clon git
  • ejecutando ansible -i devops/hosts webservers -a "ssh -T git@bitbucket.org" devuelve:

    an_ip_address | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }

Este es el command que uso para ejecutar el libro de jugadas: ansible-playbook devops/deploy.yml -i devops/hosts -vvvv Este es el post de error que recibo:

 fatal: [162.243.243.13]: FAILED! => {"changed": false, "cmd": "/usr/bin/git ls-remote '' -h refs/heads/HEAD", "failed": true, "invocation": {"module_args": {"accept_hostkey": true, "bare": false, "clone": true, "depth": null, "dest": "/var/www/aWebsite", "executable": null, "force": false, "key_file": null, "recursive": true, "reference": null, "refspec": null, "remote": "origin", "repo": "git@bitbucket.org:aUser/aRepo.git", "ssh_opts": null, "track_submodules": false, "update": true, "verify_commit": false, "version": "HEAD"}, "module_name": "git"}, "msg": "Permission denied (publickey).\r\nfatal: Could not r$ad from remote repository.\n\nPlease make sure you have the correct access rights\nand the repository exists.", "rc": 128, "stderr": "Permission denied (publickey).\r\nfatal: Could not read from remote r$pository.\n\nPlease make sure you have the correct access rights\nand the repository exists.\n", "stdout": "", "stdout_lines": []} 

Al leer la documentation para el reenvío ssh en ansible. Pude descubrir la solución.

El problema era que mis keys ssh no se reenviaban porque Ansible no reenvía las llaves por defecto, incluso si configuró el reenvío de keys en ~/.ssh/conf (actualicé mi pregunta con el ansible.cfg que tenía antes de solucionar el problema).

La solución es agregar transport = ssh a ansible.cfg en [defaults] más ejecutar ansible-playbook desde la location donde se encuentra ansible.cfg .

Mi ansible.cfg ahora se ve así:

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

Para clonar el repository privado de github sobre el server remoto, estoy haciendo esto:

Primero agrega la key ssh a tu ssh-agent:

 eval `ssh-agent -s` ssh-add ~/.ssh/my-private-key.pem 

Después de eso he modificado el ansible.cfg :

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

Ahora puedes clonar el repository privado de github incluso como usuario raíz

Normalmente, también agrego estas dos tareas en mis tareas de libro / roles:

 - name: Tell the host about our servers it might want to ssh to known_hosts: path: '/etc/ssh/known_hosts' name: 'github.com' key: "{{ lookup('pipe', 'ssh-keyscan -t rsa bitbucket.org') }}" - name: Upload sudo config for key forwarding as root lineinfile: dest: /etc/sudoers.d/ssh_key_forward line: 'Defaults env_keep+=SSH_AUTH_SOCK' create: yes owner: root group: root mode: "0440" state: present validate: 'visudo -c -f %s' 

Extraño, funciona para mí. Si la opción ssh no funciona para usted, entonces puede usar la opción de nombre de usuario / contraseña de esta manera:

 - name: Pull the code git: repo: "https://{{ bitbucket_login }}:{{ bitbucket_password|urlencode }}@bitbucket.org/path/project.git" dest: /var/www/myproject version: master 

Espero que pueda ser útil para ti y los demás