Ssh

Ansible SSH 作為一個使用者,Sudo 作為另一個使用者

  • March 4, 2016

我在配置 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

我有 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, 替換為 , 看看是否可行?

引用自:https://serverfault.com/questions/659822