2 votes

Ansible SSH comme un utilisateur et Sudo comme un autre

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.

1voto

shearn89 Points 3102
  • Pouvez-vous vous connecter à la boîte normalement et exécuter ces deux commandes ? Étant donné que la seule différence est le chemin d'accès que vous essayez d'ouvrir touch Je pense que c'est un problème de système de fichiers et non un problème ansible.

UPDATE :

Essayez de remplacer le (bar) dans votre fichier de Sudoers avec ALL pour le moment, et voir si ça marche ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X