Ansible-Task wird als bestimmter Benutzer ausgeführt

23

Ich versuche, eine bestimmte Ansible-Aufgabe als ein anderer Benutzer auszuführen als derjenige, der das Playbook ausführt. Meine .ymlDatei sieht so aus:

---

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

Das Ausführen dieser Aufgabe zeigt mir, dass der whoamiBefehl einen anderen Benutzer zurückgibt, als ich in der Aufgabe definiert habe (genau, gibt den Benutzer zurück, der in der hostsaufgerufenen Datei definiert ist ubuntu).

Ich habe auch versucht, die Aufgabe so zu definieren:

---

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

Aber dann bekomme ich eine Missing sudo passwordFehlermeldung, obwohl es eine Zeile in der sudoersDatei gibt, die besagt, dass das someusername ALL=(ALL) NOPASSWD:ALLAusgeben von Befehlen sudoauf einem entfernten Rechner someusernamemich nicht nach einem Passwort fragt.

Wie kann ich die spezifische Aufgabe als ein anderer Benutzer ausführen, der nicht der in der hostsDatei definierte Benutzer oder er rootselbst ist?

Errata
quelle

Antworten:

19

Sie haben beide Einstellungen dort falsch verstanden:

  • 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 someusernamealle Befehle auf einem beliebigen Host ohne Kennwort ausführen kann. Es erlaubt niemandem, Befehle zu erteilen, als someusernameob.

Idealerweise würden Sie sich direkt als der richtige Benutzer anmelden und remote_userdarum geht es. In der Regel können Sie sich jedoch nur als Administrator anmelden (sagen wir, ubuntu) und müssen als anderer Benutzer sudo-Befehle ausführen (sagen wir, scrapy). Dann sollten Sie remote_userdem Benutzer, der sich anmeldet, überlassen und dem Job die folgenden anzeigbaren Eigenschaften hinzufügen:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh
Capi Etheriel
quelle
1
Aha. Vielen Dank für die Klarstellung! Aber wie kann man dann eine bestimmte Aufgabe als bestimmter Benutzer ausführen?
Errata
1
Beachten Sie, dass remote_userstandardmäßig der aktuelle Benutzer auf Ihrem lokalen Computer verwendet wird - genau wie bei ssh.
Capi Etheriel
In Ordnung, aber bei einem Setup wie diesem erhalte ich immer noch Missing sudo passworddie Fehlermeldung. Gibt es eine Möglichkeit, zu vermeiden, dass Sie für diesen bestimmten Benutzer nach dem Kennwort gefragt werden?
Errata
Ich glaube, ich habe die Antwort gefunden, indem ubuntu ALL=(someusername) NOPASSWD: ALLich Sudoern die Zeile hinzugefügt habe:, aber ich muss über die Sicherheit dahinter nachdenken ... Gibt es eine andere Möglichkeit, als Sudoern diese Zeile hinzuzufügen?
Errata
1
Der richtige Weg wäre, Ihren entfernten Benutzer sich direkt anmelden zu lassen.
Capi Etheriel
16

Beachten Sie, dass nach Ansible 1.9 der sudoWortlaut durch ersetzt becomewurde

sudo: yes
sudo_user: some_user

wird (Wortspiel beabsichtigt):

become: yes
become_user: some_user

Weitere Einzelheiten finden Sie hier: /programming//a/22749788/402727

Ex-Nerd
quelle