Tarea Ansible: clona git privado sin reenvío SSH

Intento crear un libro de jugadas de Ansible que se ejecutará desde las computadoras de nuestro equipo de desarrollo y desde los serveres de CI / CD.

Una de las tareas en el libro de jugadas es get el código fuente de nuestro proyecto desde un repository privado de git. Como el libro de jugadas debe ejecutarse desde serveres CI / CD, no podemos usar el reenvío SSH.

Lo que se me ocurrió es copyr la key privada SSH necesaria para la máquina host remota y luego usar la key clonar el código del repository git privado.

Sin embargo, al intentar esto, la tarea de clonación se bloquea. Al intentar ejecutar el command manualmente, solicita una frase de contraseña para la key privada SSH. La tecla SSH no usa frase de contraseña (en blanco).

¿Alguien podría compartir su solución de este problema (probablemente muy común)?

En caso de que alguien necesite, este es mi libro de jugadas actual:

- name: Create SSH directory file: path=/root/.ssh state=directory - name: Copy SHH key for Git access copy: content: "{{ git_ssh_key }}" dest: /root/.ssh/id_rsa owner: root group: root mode: 0600 # Also tried this, but it also hangs #- name: Start SSH agent and add SSH key # shell: eval `ssh-agent -s` && ssh-add - name: Get new source from GIT git: key_file: /root/.ssh/id_rsa repo: "git@gitlab.com:user/repo.git" dest: "{{ staging_dir }}" depth: 1 accept_hostkey: yes clone: yes 

Estoy usando ansible 2.3.1.0, python version = 2.7.12

Aquí hay pasos para hacerlo funcionar (probado con Ansible 2.3.1 y Python 2.7.10 en MacOS, Ubuntu LTS):

  1. Genere un nuevo par de keys SSH sin frase de contraseña ssh-keygen -f my_ssh_key -N '' .

  2. Agregue my_ssh_key.pub a su perfil de usuario del server de repository

  3. Prueba con el siguiente libro de jugadas:

_

 --- - hosts: localhost gather_facts: no vars: git_ssh_public_key: "Your public ssh key" git_ssh_key: | -----BEGIN RSA PRIVATE KEY----- .... actual key here .... -----END RSA PRIVATE KEY----- tasks: - name: Copy SSH public key file copy: content: "{{ git_ssh_public_key }}" dest: /root/.ssh/id_rsa.pub mode: 0644 - name: Copy SSH private key file copy: content: "{{ git_ssh_key }}" #src: id_rsa dest: /root/.ssh/id_rsa mode: 0600 - name: Get new source from GIT git: repo: "git@gitlab.com:user/repo.git" dest: "/var/www/" depth: 1 accept_hostkey: yes clone: yes 

AVISOS DE SEGURIDAD IMPORTANTES

Si desea utilizar este ejemplo en el mundo real, no guarde su key privada en text sin formatting: use Ansible Vault .

Tampoco deberías usar root como tu usuario ansible. Sería más seguro crear un nuevo usuario sin permissions sudo.

Supongo que el problema es que para la tarea automatizada, git no usa una key ssh. He leído (al mirar alnetworkingedor por un par de minutos) que con git 2.10, puedes proporcionar ssh cosas para pasar cuando llames a git … así que supongo que podrías intentar algo como:

 git -c core.sshCommand='ssh -i /path/to/private/key' fetch origin 

O cualquier otro command que le gustaría usar. También puedes arreglarlo en la configuration:

 git config core.sshCommand 'ssh -i /path/to/private/key' 

De todos modos, espero que ayude un poco

Especifique la key SSH privada que se utilizará al ejecutar el command del shell con o sin Ruby.