2015-11-22 22 views
9

Viene visualizzato un messaggio di errore quando provo a eseguire un'attività con sudo nel mio anastomo Playbook.Manca la password quando sudo

Ecco il mio playbook:

--- 
- hosts: production 
    gather_facts: no 
    remote_user: deployer 
    become: yes 
    become_method: sudo 
    become_user: root 

    tasks: 
    - name: Whoami 
     command: /usr/bin/whoami 

mi aspetterei whoami di essere root ma il compito non riesce con il messaggio di errore:

» ansible-playbook -i ansible_hosts sudo.yml --ask-sudo-pass 
SUDO password: [I paste my sudo password here] 

PLAY [production] ************************************************************* 

GATHERING FACTS *************************************************************** 
fatal: [MY.IP] => Missing become password 

TASK: [Whoami] **************************************************************** 
FATAL: no hosts matched or all hosts have already failed -- aborting 

Quando ho ssh manualmente nella scatola e cercare di sudo è funziona come previsto:

» ssh [email protected] 
» sudo whoami 
[I paste the same sudo password] 
root 

La password dell'utente del deployer è stata impostata da Ansibl e come segue (in un playbook diverso):

- hosts: production 
    remote_user: root 

    # The {{ansible_become_pass}} comes from this file: 
    vars_files: 
    - ./config.yml 

    tasks: 

    - name: Create deployer user 
     user: name=deployer uid=1040 groups=sudo,deployer shell=/bin/bash password={{ansible_become_pass}} 

Dove {{ansible_become_pass}} è la password che desidero hash con il seguente frammento di pitone:

python -c 'import crypt; print crypt.crypt("password I desire", "$1$SomeSalt$")' 

"password I desire" è sostituire con una password e "$1$SomeSalt$" è un sale casuale .

Sto usando Ansible versione 1.9.4.

Qual è il problema?

+0

Ho provato entrambi i quaderni e hanno funzionato per me con 1.9.2 ansible. L'unica modifica che ho fatto è stata quella di impostare la password utente ansible e ho appena incollato il valore piuttosto che includerlo da un altro file. Non posso immaginare che farebbe comunque la differenza. Stavo usando la mia workstation e mi collegavo a localhost. –

+0

Forse è un bug nella tua versione con il missaggio dello switch --ask-sudo con la sintassi diventata nel tuo playbook? Ho provato entrambi --ask-sudo e --ask-become e entrambi hanno funzionato. –

risposta

4

Ho provato la versione e il playbook, solo con --ask-pass, che restituisce il risultato "stdout": "root".

È necessario sostituire --ask-sudo-pass con --ask-pass. E assicurati che l'utente del deployer abbia i privilegi di root.

$ ./bin/ansible --version 
ansible 1.9.4 
$ ./ansible/bin/ansible-playbook -vv pl.yml --ask-pass 
SSH password: 

PLAY [localhost] ************************************************************** 

TASK: [Whoami] **************************************************************** 
<localhost> REMOTE_MODULE command /usr/bin/whoami 
changed: [localhost] => {"changed": true, "cmd": ["/usr/bin/whoami"], "delta": "0:00:00.002555", "end": "2015-12-05 07:17:16.634485", "rc": 0, "start": "2015-12-05 07:17:16.631930", "stderr": "", "stdout": "root", "warnings": []} 

PLAY RECAP ******************************************************************** 
localhost     : ok=1 changed=1 unreachable=0 failed=0