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

23

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 .ymlfichier 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 whoamicommande 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 hostsfichier 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' Missing sudo passworderreur ' ', bien qu'il y ait une ligne dans le sudoersfichier qui dit someusername ALL=(ALL) NOPASSWD:ALLet émette des commandes avec sudosur la machine distante car someusernamene 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 hostsfichier ou rootlui-même?

errata
la source

Réponses:

19

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 someusernamed'exécuter toutes les commandes dans n'importe quel hôte sans mot de passe. Il ne permet à personne d'émettre des commandes comme someusernamesi.

Idéalement, vous vous connecteriez directement en tant que bon utilisateur et c'est remote_usertout. Mais en général, vous ne pouvez vous connecter qu'en tant qu'administrateur (disons ubuntu) et avoir des commandes sudo en tant qu'autre utilisateur (disons scrapy). Ensuite, vous devez laisser remote_userà l'utilisateur qui se connecte et ajouter 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
Capi Etheriel
la source
1
Je vois. Merci beaucoup d'avoir clarifié cela! Mais comment exécuter une tâche spécifique en tant qu'utilisateur spécifique alors?
errata
1
Notez que par remote_userdéfaut l'utilisateur actuel de votre machine locale - tout comme le fait ssh en fait.
Capi Etheriel
D'accord, mais avec une configuration comme celle-ci, j'obtiens toujours une Missing sudo passworderreur ' '. Existe-t-il un moyen d'éviter de demander un mot de passe pour cet utilisateur spécifique?
errata
Je pense avoir trouvé la réponse, en ajoutant la ligne aux sudoers:, ubuntu ALL=(someusername) NOPASSWD: ALLmais je dois penser à la sécurité derrière ça ... Y a-t-il une autre façon que d'ajouter cette ligne aux sudoers?
errata
1
la bonne façon serait de laisser votre utilisateur distant se connecter directement.
Capi Etheriel
16

Notez qu'après Ansible 1.9, le sudolibellé a été remplacé par become, ainsi

sudo: yes
sudo_user: some_user

devient (jeu de mots voulu):

become: yes
become_user: some_user

Voir plus de détails ici: /programming//a/22749788/402727

ex-nerd
la source