一千萬個為什麽

搜索

你如何在Ansible中模擬“sudo su <user>”?



我有一個服務器,我的用戶可以在沒有密碼的情況下向root用戶sudo,然後root用戶可以在沒有密碼的情況下sudo給第三個用戶。但是,如果沒有密碼,我的用戶不能直接向第三個用戶sudo。

Ansible的成為指令以傳統方式使用sudo,即需要提示的方式為我的密碼。

I've tried putting become_user: root on a block and become_user: on a task inside that block, but it appears Ansible overrides the block's definition, rather than nesting the sudo calls as I hoped.

註意:這個問題也被問到關於StackOverflow ,但由於沒有解決方案,我想我會在這裏重新發布,我認為它是更好的網站。

轉載註明原文: 你如何在Ansible中模擬“sudo su <user>”?

一共有 2 個回答:

在遊戲級別成為超級用戶並成為任務級別的另一個用戶:

- hosts: all
  become: yes
  tasks:

    - file:
        path: /tmp/test
        state: touch
      become_user: www-data

驗證:

$ ls -l /tmp | grep test
-rw-r--r-- 1 www-data www-data    0 Mär 10 14:08 test

對於非常簡單的情況,像下面這樣的解決方法也可以提供幫助,但這並不能真正擴展,因為您不能在此策略中使用ansible模塊:

- name: test
  command: "sudo -u www-data whoami"
  become: true

Output (extract): "stdout": "www-data"

例如,您想要創建一個可以使用的文件:

 name: Create file
 shell: "touch abc"
 become_user: 
 become: yes

這相當於:: sudo su username -c“touch abc”