Permissions

以特定使用者身份執行 Ansible 任務

  • November 26, 2020

我正在嘗試以與執行劇本的使用者不同的使用者身份執行特定的 Ansible 任務。我的.yml文件如下所示:

---

- hosts: staging_servers
 tasks:    
   - name: check user
     remote_user: someusername
     shell: whoami

執行此任務向我顯示該whoami命令返回的使用者與我在任務中定義的使用者不同(準確地說,返回在hosts名為 的文件中定義的使用者ubuntu)。

我也嘗試這樣定義任務:

---

- hosts: staging_servers
 tasks:
   - name: check user
     sudo: yes
     sudo_user: someusername
     shell: whoami

但後來我得到“ Missing sudo password”錯誤,雖然sudoers文件中有一行說someusername ALL=(ALL) NOPASSWD:ALLsudo在遠端機器上發出命令,因為someusername它不要求我輸入密碼。

那麼,如何以不是hosts文件中定義的使用者或root他自己的不同使用者身份執行特定任務?

您在那裡誤解了這兩種設置:

  • remote_user是一個 Ansible 設置,用於控制 Ansible 用於連接的 SSH 使用者:ssh ${REMOTE_USER}@remotehost
  • someusername ALL=(ALL) NOPASSWD:ALL是一個 sudo 配置,它允許使用者someusername在沒有密碼的情況下執行任何主機中的所有命令。它不允許任何人發出命令someusername

理想情況下,您將直接以正確的使用者身份登錄,這remote_user就是全部內容。但通常您只能以管理使用者身份登錄(比如ubuntu),並且必須以另一個使用者身份(比如 )執行 sudo 命令scrapy。然後,您應該留給remote_user登錄的使用者,並將以下 ansible 屬性添加到作業中:

- name: log in as ubuntu and do something as scrapy
 remote_user: ubuntu
 sudo: true
 sudo_user: scrapy
 shell: do-something.sh

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