SSH Ansible como um usuário e Sudo como outro

2

Estou com problemas para configurar Ansible e sudo para permitir o SSH em um servidor e executar um comando como outro usuário.

Eu passei pelas perguntas / respostas abaixo e a documentação do Ansible aqui: link

mas ainda não consigo fazê-lo funcionar.

Por favor, alguém pode me colocar no caminho certo.

Referências:

link Ansible: usando um usuário sudo diferente para hosts diferentes

Estou tentando fazer isso:

server-01                  client-01
---------                  -----------
foo      ----> ssh --->    foo
                           bar      - sudo as root user

Usando Ansible, conectar de: server-01           para: client-01

usando o usuário foo e, em seguida, use sudo para executar um comando como barra de usuário A barra do usuário está configurada para poder executar qualquer comando.

No entanto, não tenho certeza de onde está o problema, com sudo ou Ansible. Eu acho que o problema é com o sudo, mas não tenho certeza de onde.

Este comando ansible funciona:

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

Este não funciona:

[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

Eu tenho autenticação SSH sem uma configuração de senha entre o server-01 e o client-01 para o usuário foo e funciona bem.

[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 ~]$

Esta é minha configuração:

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

Quando no servidor de destino (cliente-01), posso testar o sudo. Eu acho que o sudo é a parte que não está funcionando, mas devido a isso eu não consigo configurar nenhum dos Ansible Playbooks.

[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

Talvez esta seja a linha que está falhando:

  foo           ALL=(bar) NOPASSWD:                 ALL

Agradeço por qualquer ajuda.

    
por Stuart 15.01.2015 / 17:42

1 resposta

1
  • Você pode usar o SSH na caixa normalmente e executar esses dois comandos? Dada a única diferença é que o caminho que você está tentando touch , eu acho que é um problema de sistema de arquivos e não um ansible.

ATUALIZAÇÃO:

Tente substituir o (bar) no arquivo do Sudoers por ALL , por enquanto, e veja se isso funciona?

    
por 15.01.2015 / 17:45