J'ai des difficultés à configurer Ansible et sudo pour me permettre de me connecter en SSH à un serveur et d'exécuter une commande en tant qu'autre utilisateur.
J'ai parcouru les questions / réponses ci-dessous et la documentation Ansible ici : http://docs.ansible.com/intro_inventory.html
mais je n'arrive toujours pas à le faire fonctionner.
Quelqu'un peut-il me mettre sur la bonne voie ?
Références :
https://stackoverflow.com/questions/24743085/ansible-ssh-as-one-user-and-sudo-as-another Ansible : utilisation de différents utilisateurs sudo pour différents hôtes
C'est ce que j'essaie de faire :
server-01 client-01
--------- -----------
foo ----> ssh ---> foo
bar - sudo as root user
Utilisation d'Ansible, se connecter depuis : server-01 à : client-01
en utilisant l'utilisateur foo et ensuite utiliser sudo pour exécuter une commande en tant qu'utilisateur bar. L'utilisateur bar est configuré pour pouvoir exécuter n'importe quelle commande.
Cependant, je ne sais pas où se situe le problème, avec sudo ou Ansible. Je pense que le problème vient de sudo, mais je ne sais pas où.
Cette commande ansible fonctionne :
[foo@server-01 ~]$ **ansible client-01 -m raw -a "touch /var/tmp/testfile" --ask-sudo-pass**
sudo password: ********* ( password for foo user )
client-01 | success | rc=0 >>
Celui-ci ne fonctionne pas :
[foo@server-01 ~]$ ansible client-01 -m raw -a "touch /etc/testfile" --ask-sudo-pass
sudo password: ********* ( password for foo user )
client-01 | FAILED | rc=1 >>
touch: cannot touch `/etc/testfile': Permission denied
J'ai configuré l'authentification SSH sans mot de passe entre le serveur-01 et le client-01 pour l'utilisateur foo et cela fonctionne bien.
[foo@server-01 ~]$ id
uid=96(foo) gid=96(foo) groups=96(foo)
[foo@server-01 ~]$ su - foo
Password:
[foo@server-01 ~]$
[foo@server-01 ~]$
[foo@server-01 ~]$ ssh client-01
Last login: Thu Jan 15 16:32:05 2015 from server-01
[foo@client-01 ~]$
Voici ma configuration :
server-01: /etc/ansible/hosts
-------------------------------------
[clients]
client-01 ansible_sudo=true ansible_ssh_user=foo ansible_sudo_user=bar
client-01: /etc/sudoers
-------------------------------------
[root@client-01 ~]# cat /etc/sudoers
#
root ALL=(ALL) ALL
bar ALL=(ALL) ALL
foo ALL=(bar) NOPASSWD: ALL
Sur le serveur de destination (client-01), je peux tester sudo. Je pense que sudo est la partie qui ne fonctionne pas, mais à cause de cela, je ne peux configurer aucun des Playbooks Ansible.
[root@client-01 ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@client-01 ~]# su - bar
[bar@client-01 ~]$ sudo -l
[sudo] password for bar:
User bar may run the following commands on this host:
(ALL) ALL
[bar@client-01 ~]$ sudo touch /etc/tempfile
[bar@client-01 ~]$ ls -alp /etc/tempfile
-rw-r--r-- 1 root root 0 Jan 15 17:08 /etc/tempfile
[bar@client-01 ~]$ sudo rm /etc/tempfile
[bar@client-01 ~]$ exit
logout
[root@client-01 ~]# su - foo
[foo@client-01 ~]$ sudo -l
User foo may run the following commands on this host:
(bar) NOPASSWD: ALL
[foo@client-01 ~]$ sudo touch /etc/tempfile
[sudo] password for foo:
Sorry, user foo is not allowed to execute '/bin/touch /etc/tempfile' as root on client-01.
[foo@client-01 ~]$ exit
logout
C'est peut-être la ligne qui est défaillante :
foo ALL=(bar) NOPASSWD: ALL
Je vous remercie pour toute aide.