Назад | Перейти на главную страницу

Ansible SSH как один пользователь и Sudo как другой

У меня возникли проблемы с настройкой Ansible и sudo, чтобы я мог подключиться к серверу по SSH и выполнить команду от имени другого пользователя.

Я просмотрел приведенные ниже вопросы / ответы и документацию по Ansible здесь: http://docs.ansible.com/intro_inventory.html

но я все еще не могу заставить его работать.

Пожалуйста, может кто-нибудь поставить меня на правильный путь.

Ссылки:

https://stackoverflow.com/questions/24743085/ansible-ssh-as-one-user-and-sudo-as-another Ansible: использование разных пользователей sudo для разных хостов

Я пытаюсь это сделать:

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

Используя Ansible, подключитесь с: server-01 к: client-01

используя пользователя foo, а затем используйте sudo для запуска команды в качестве пользовательской панели. Пользовательская панель настроена на возможность запуска любой команды.

Однако я не уверен, где проблема, с sudo или Ansible. Я думаю, что проблема в sudo, но не знаю, где именно.

Эта доступная команда работает:

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

Это не работает:

[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

У меня есть SSH-аутентификация без установки пароля между server-01 и client-01 для пользователя foo, и он работает нормально.

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

Это моя установка:

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

На конечном сервере (client-01) я могу протестировать sudo. Я думаю, что sudo - это часть, которая не работает, но из-за этого я не могу настроить ни один из Ansible Playbook.

[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

Возможно, это строка, которая не работает:

  foo           ALL=(bar) NOPASSWD:                 ALL

Благодарю вас за любую помощь.

  • Можете ли вы подключиться по SSH в обычном режиме и запустить обе эти команды? С той лишь разницей, что вы пытаетесь идти touch, Я бы предположил, что это проблема файловой системы, а не доступная.

ОБНОВИТЬ:

Попробуйте заменить (bar) в вашем файле Sudoers с ALL, а пока и посмотрите, работает ли это?