Esecuzione dell'attività Ansible come utente specifico


23

Sto cercando di eseguire un'attività Ansible specifica come utente diverso da quello che sta eseguendo il playbook. Il mio .ymlfile è simile al seguente:

---

- hosts: staging_servers
  tasks:    
    - name: check user
      remote_user: someusername
      shell: whoami

L'esecuzione di questa attività mi mostra che il whoamicomando restituisce un utente diverso da quello che ho definito nell'attività (precisamente, restituisce l'utente che è definito nel hostsfile chiamato ubuntu).

Ho anche provato a definire l'attività in questo modo:

---

- hosts: staging_servers
  tasks:
    - name: check user
      sudo: yes
      sudo_user: someusername
      shell: whoami

ma poi ricevo ' Missing sudo password' errore, sebbene ci sia una riga nel sudoersfile che dice someusername ALL=(ALL) NOPASSWD:ALLed emette comandi con sudosul computer remoto in quanto someusernamenon mi chiede una password.

Quindi, come posso eseguire l'attività specifica come un utente diverso che non è l'utente definito nel hostsfile o rootse stesso?

Risposte:


19

Stai fraintendendo entrambe le impostazioni lì:

  • remote_user è un'impostazione Ansible che controlla l'utente SSH che Ansible sta utilizzando per connettersi:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL è una configurazione sudo che consente all'utente someusernamedi eseguire tutti i comandi in qualsiasi host senza password. Non consente a nessuno di inviare comandi come someusernamese.

Idealmente, dovresti accedere direttamente come l'utente giusto e questo remote_userè tutto. Ma di solito sei in grado di accedere solo come utente amministrativo (diciamo, ubuntu) e devi eseguire i comandi sudo come un altro utente (diciamo scrapy). Quindi dovresti lasciare remote_userall'utente che accede e aggiungere le seguenti proprietà rispondibili al lavoro:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh

1
Vedo. Grazie mille per aver chiarito questo! Ma allora come eseguire un'attività specifica come utente specifico?
errata,

1
Si noti che per remote_userimpostazione predefinita è l'utente corrente nel computer locale, proprio come ssh, in realtà.
Capi Etheriel,

Va bene, ma con una configurazione come questa ottengo ancora Missing sudo passwordl'errore " ". C'è un modo per evitare di chiedere la password per quell'utente specifico?
errata,

Penso di aver trovato la risposta, aggiungendo la linea ai sudoers:, ubuntu ALL=(someusername) NOPASSWD: ALLma devo pensare alla sicurezza dietro questo ... Esiste un altro modo se non quello di aggiungere questa linea ai sudoers?
errata,

1
il modo corretto sarebbe consentire all'utente remoto di accedere direttamente.
Capi Etheriel,

16

Si noti che dopo Ansible 1.9, il sudotesto è stato sostituito con become, quindi

sudo: yes
sudo_user: some_user

diventa (gioco di parole):

become: yes
become_user: some_user

Vedi più specifiche qui: /programming//a/22749788/402727

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.