У меня возникли проблемы с настройкой 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
Благодарю вас за любую помощь.
touch
, Я бы предположил, что это проблема файловой системы, а не доступная.ОБНОВИТЬ:
Попробуйте заменить (bar)
в вашем файле Sudoers с ALL
, а пока и посмотрите, работает ли это?