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?
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
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