以一个用户身份使用 Ansible SSH,以另一个用户身份使用 Sudo

以一个用户身份使用 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 以用户 bar 身份运行命令,用户 bar 设置为能够运行任何命令。

但是,我不确定问题出在哪里,是 sudo 还是 Ansible。我认为问题出在 sudo 上,但我不确定问题出在哪里。

这个 ansible 命令有效:

[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

我为用户 foo 在 server-01 和 client-01 之间设置了无需密码的 SSH 身份验证,并且一切正常。

[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

我感谢您的帮助。

答案1

  • 你能正常通过 SSH 进入盒子并运行这两个命令吗?鉴于唯一的区别是你尝试的路径touch,我猜这是一个文件系统问题,而不是 ansible 问题。

更新:

现在尝试将(bar)Sudoers 文件中的 替换为,看看是否有效?ALL

相关内容