2016-05-19 31 views
24

Ho rilevato un server Ubuntu 14.04. Ha un utente chiamato "deployer" (usato con capistrano), e come tale ha bisogno di privilegi sudo. Con questa configurazione, posso accedere al server e fare cose come:Ansible: creare un utente con privilegi sudo

workstation> ssh [email protected] 
myserver> sudo apt-get install git 
myserver> exit 
workstation> 

Sto cercando di capire come utilizzare Ansible (versione 2.0.2.0 e Python 2.7.3) per creare un utente chiamato "deployer "ed essere in grado di accedere al server con quell'ID e quindi sudo-ish cose come" apt-get install ". Il mio playbook si presenta così:

--- 
- hosts: example 
    become: yes 
    tasks: 
    - name: Update apt cache 
    apt: 
     update_cache: yes 
     cache_valid_time: 3600 

    - group: name=sudo state=present 

    - name: Add deployer user and add it to sudo 
    user: name=deployer 
      state=present 
      createhome=yes 
    become: yes 
    become_method: "sudo" 

    - name: Set up authorized keys for the deployer user 
    authorized_key: user=deployer key="{{item}}" 
    with_file: 
     - /home/jaygodse/.ssh/id_rsa.pub 

Dopo l'esecuzione di questo playbook, sono in grado di ssh nella macchina come "deployer", (ad esempio, ssh Deployer @ mioserver), ma se ho eseguito un comando sudo, mi chiede sempre per la mia password sudo.

Capisco che l'utente del "deployer" debba in definitiva trovare la sua strada nel file degli utenti visudo, ma non riesco a capire quali magici incantesimi di Ansible invocare in modo da poter eseguire ssh nella macchina come deployer e quindi eseguire un sudo comando (ad es. sudo apt-get install git ") senza password richiesta

Ho cercato in alto e in basso, e non riesco a trovare un frammento di playbook Ansible che metta l'utente in" deployer " il gruppo sudo senza richiedere una password Come è fatto?

risposta

52

A volte è sapere cosa chiedere.Non sapevo di essere uno sviluppatore che ha eseguito alcuni lavori DevOps.

Apparentemente il login 'senza password' o NOPASSWD è una cosa che è necessario inserire nel file/etc/sudoers.

La risposta alla mia domanda è Ansible: best practice for maintaining list of sudoers.

Il codice Playbook Ansible frammento si presenta come questo dal mio problema:

- name: Make sure we have a 'wheel' group 
    group: 
    name: wheel 
    state: present 

- name: Allow 'wheel' group to have passwordless sudo 
    lineinfile: 
    dest: /etc/sudoers 
    state: present 
    regexp: '^%wheel' 
    line: '%wheel ALL=(ALL) NOPASSWD: ALL' 
    validate: 'visudo -cf %s' 

- name: Add sudoers users to wheel group 
    user: name=deployer groups=wheel append=yes state=present createhome=yes 


- name: Set up authorized keys for the deployer user 
    authorized_key: user=deployer key="{{item}}" 
    with_file: 
    - /home/railsdev/.ssh/id_rsa.pub 

E la parte migliore è che la soluzione è idempotente. Non aggiunge la riga

%wheel ALL=(ALL) NOPASSWD: ALL 

a/etc/sudoers quando il playbook viene eseguito una volta successiva. E sì ... sono stato in grado di accedere al server come "deployer" ed eseguire comandi sudo senza dover fornire una password.

+33

Si prega di aggiungere la riga 'convalida: 'visudo -cf% s'' alla fine della sezione' lineinfile: 'per convalidare prima del salvataggio. Incasinare il file sudoers ti bloccherà permanentemente dall'accesso sudo. –

+1

'authorized_key' [accetta la chiave come stringa] (http://docs.ansible.com/ansible/latest/authorized_key_module.html) nel parametro' key' dalla v1.9 – Tim

+1

È anche possibile creare/copiare un file in '/ etc/sudoers.d', la maggior parte delle distribuzioni come linea di default include quella ... –

Problemi correlati