web-dev-qa-db-fra.com

Exécution d'une tâche Ansible en tant qu'utilisateur spécifique

J'essaie d'exécuter une tâche Ansible spécifique en tant qu'utilisateur différent de celui qui exécute le playbook. Mon fichier .yml Ressemble à ceci:

---

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

L'exécution de cette tâche me montre que la commande whoami renvoie un utilisateur différent de celui que j'ai défini dans la tâche (précisément, renvoie l'utilisateur défini dans le fichier hosts appelé ubuntu).

J'ai également essayé de définir la tâche comme ceci:

---

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

mais ensuite j'obtiens l'erreur "Missing Sudo password", bien qu'il y ait une ligne dans le fichier sudoers qui indique someusername ALL=(ALL) NOPASSWD:ALL et émet des commandes avec Sudo sur la machine distante comme someusername ne me demande pas de mot de passe.

Alors, comment puis-je exécuter la tâche spécifique en tant qu'utilisateur différent qui n'est pas l'utilisateur défini dans le fichier hosts ou root lui-même?

23
errata

Vous comprenez mal les deux paramètres:

  • remote_user est un paramètre Ansible qui contrôle l'utilisateur SSH qu'Ansible utilise pour se connecter: ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL est une configuration Sudo qui permet à l'utilisateur someusername d'exécuter toutes les commandes dans n'importe quel hôte sans mot de passe. Cependant, il ne permet à personne d'émettre des commandes en tant que someusername.

Idéalement, vous vous connecteriez directement en tant qu'utilisateur approprié et c'est ce que remote_user c'est tout. Mais en général, vous ne pouvez vous connecter qu'en tant qu'administrateur (disons, ubuntu) et devez exécuter les commandes Sudo en tant qu'autre utilisateur (disons scrapy). Ensuite, vous devez quitter remote_user à l'utilisateur qui se connecte et ajoute les propriétés ansibles suivantes au travail:

- 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

Notez qu'après Ansible 1.9, le libellé Sudo a été remplacé par become, donc

Sudo: yes
Sudo_user: some_user

devient (jeu de mots voulu):

become: yes
become_user: some_user

Voir plus de détails ici: https://stackoverflow.com/a/22749788/402727

16
ex-nerd