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