it-swarm.com.de

Ausführen der Ansible-Aufgabe als bestimmter Benutzer

Ich versuche, eine bestimmte Ansible-Aufgabe als anderer Benutzer als derjenige auszuführen, der das Playbook ausführt. Meine .yml Datei sieht folgendermaßen aus:

---

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

Das Ausführen dieser Aufgabe zeigt mir, dass der Befehl whoami einen anderen Benutzer zurückgibt als in der Aufgabe definiert (genau den Benutzer zurückgibt, der in der Datei hosts mit dem Namen ubuntu definiert ist).

Ich habe auch versucht, die Aufgabe folgendermaßen zu definieren:

---

- hosts: staging_servers
  tasks:
    - name: check user
      Sudo: yes
      Sudo_user: someusername
      Shell: whoami

aber dann erhalte ich den Fehler 'Missing Sudo password', obwohl es in der Datei sudoers eine Zeile gibt, die someusername ALL=(ALL) NOPASSWD:ALL sagt und Befehle mit Sudo auf dem Remotecomputer als ausgibt someusername fragt mich nicht nach einem Passwort.

Wie kann ich die bestimmte Aufgabe als ein anderer Benutzer ausführen, der nicht der in der Datei hosts oder root selbst definierte Benutzer ist?

23
errata

Sie missverstehen dort beide Einstellungen:

  • remote_user ist eine Ansible-Einstellung, die den SSH-Benutzer steuert, mit dem Ansible eine Verbindung herstellt: ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL ist eine Sudo-Konfiguration, mit der der Benutzer someusername alle Befehle auf einem beliebigen Host ohne Kennwort ausführen kann. Es erlaubt jedoch niemandem, Befehle als someusername auszugeben.

Idealerweise würden Sie sich direkt als der richtige Benutzer anmelden und das ist es, was remote_user dreht sich alles um. Normalerweise können Sie sich jedoch nur als Administrator anmelden (z. B. ubuntu) und müssen Sudo-Befehle als anderer Benutzer ausführen (z. B. scrapy). Dann solltest du remote_user an den Benutzer, der sich anmeldet und dem Job die folgenden ansiblen Eigenschaften hinzufügt:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  Sudo: true
  Sudo_user: scrapy
  Shell: do-something.sh
20
Capi Etheriel

Beachten Sie, dass nach Ansible 1.9 der Wortlaut Sudo durch become ersetzt wurde

Sudo: yes
Sudo_user: some_user

wird (Wortspiel beabsichtigt):

become: yes
become_user: some_user

Weitere Einzelheiten finden Sie hier: https://stackoverflow.com/a/22749788/402727

16
ex-nerd