2015-07-26 20 views
6

Sto provando a scrivere regole di distribuzione con Ansible. Alcuni dei passaggi sono:Ansible: come clonare un repository come altro utente

  1. Update e aggiornamento del server
  2. creare un utente chiamato Harry
  3. aggiungere le chiavi pubbliche e private per harry
  4. clonare un repository Git da bitbucket.org

Voglio clonare il repository come utente harry nella sua home directory (è per questo che sto copiando le sue chiavi pubbliche e private). Il problema è che non è possibile specificare un utente che il clone git deve essere eseguito come. Quindi, Ansible prova a clonare il repository come root e fallisce perché non ha i diritti per accedere al repository.

Come si risolve?

+0

Se c'è una risposta che ha risolto questo, è possibile contrassegnarlo come risolto per favore? –

risposta

2

È possibile specificare un utente per ogni operazione nel playbook:

- name: Clone bitbucket repo 
    git: ... 
    become: yes 
    become_user: harry 

Per maggiori dettagli si veda Ansible Privilege Escalation.

Un'alternativa più sicura all'inserimento della chiave privata su un server remoto consiste nell'abilitare l'inoltro di chiavi ssh nella sshd config sul server e nella configurazione ssh localmente. La chiave quindi non lascia mai la tua casella locale.

+2

Ho ssh forwarding e funziona con root. Ma non sembra funzionare con diventare_user – nha

+1

SSH_AUTH_SOCK si perde con diventare_user. L'inoltro delle chiavi non può funzionare a meno che non venga conservato. Forse puoi aggiungerlo con diventare_flags. –

+1

Come @BenAtkin menzionato, SSH_AUTH_SOCK si perde, ma anche se lo si conserva nel file/etc/sudoers, è necessario anche dare le autorizzazioni 'harry' per accedere al file socket. http://serverfault.com/questions/107187/ssh-agent-forwarding-and-sudo-to-another-user – krzychu

10

Come da documentazione di Ansible su Privilege Escalation, Ansible ha limitazioni a diventare un utente non privilegiato in quanto espone un buco di sicurezza a Harry.

Utilizzando il modulo Ansible git, è possibile specificare di utilizzare la chiave privata di Harry da parte dell'utente privilegiata Ansible utilizzando il parametro key_file, e utilizzando become_user permette ai file clonati da dare la proprietà a Harry. Ad esempio:

- name: Clone bitbucket repo 
    git: 
    repo: [email protected]:your-repo.git 
    dest: /var/www/ 
    version: master 
    accept_hostkey: yes 
    key_file: /home/harry/.ssh/id_rsa 
    become_user: harry 
Problemi correlati