2014-07-14 11 views
5

Ho alcune difficoltà ad adattare la configurazione di Ansible al mio ambiente.SSH Ansible come un utente e Sudo come un altro

Il mio ambiente di test:

  • PermitRootLogin no
  • Solo un utente autorizzato a connettersi tramite SSH (foo, senza alcun privilegio)
  • Un utente con privilegi sudo (bar ALL = (ALL) ALL)

mio inventario ospite ansible assomiglia a questo:

[servers] 
server1 ansible_ssh_host=192.168.0.1 ansible_sudo=true ansible_ssh_user=foo ansible_sudo_user=bar 

Ho una chiave SSH per l'utente foo.

Quando provo questo comando ad hoc (o qualsiasi altro) con la parola d'bar:

ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass 
server1 | FAILED => Incorrect sudo password 

Poi se faccio lo stesso comando con la password pippo:

ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass 
Sorry, user foo is not allowed to execute '/bin/bash -c echo SUDO-SUCCESS-rlpfhamukjnsfyokqbjpbttviiuildif; echo test > /etc/testfile' as bar on server1. 

Così Ansible sicuramente utilizzare foo come utente sudo e non bar come ho specificato. C'è un modo per forzare l'uso di bar invece di foo? Io davvero non capisco la funzionalità sudo su Ansible, anche se io uso lo stesso utente per tutto (bar per SSH e la password bar) give ansible mi restituisce:

server1 | FAILED | rc=1 >> 
echo test > /etc/testfile : Permission denied 

quando sto accedendo come bar sul mio host e facendo "sudo echo test>/etc/testfile" mi chiede la password della barra e fa il comando correttamente. Dove mi sbaglio con il comportamento di Ansible?

risposta

4

Pensate a come questo:

  • ansible_ssh_user è l'utente a ssh all'host come
  • ansible_sudo_user è l'utente a sudo sull'host

In altre parole, usando il vostro gli utenti e i comandi come nell'esempio, i comandi equivalenti che eseguiranno ansible sono:

ssh [email protected] sudo -u bar "echo test > testfile"

Pertanto, è necessario fornire la password dell'utente foo, non l'utente bar. L'utente foo avrà i privilegi di sudo come bar. Qualcosa di simile a sudoers:

foo ALL=(bar) NOPASSWD: ALL 

Ora foo può essere eseguito tutti i comandi come bar senza password.