问题描述
我正在尝试在以 ansible 作为特定用户的系统上运行命令。
我以该特定用户身份运行很重要,因为该命令需要工作的配置文件仅对该用户可用。任何其他用户将无法读取配置文件,因此将无法工作。
我正在尝试使用 ansible 的 become_user
、become
和 become_method
来运行命令,但 ansible 似乎忽略了它。举个例子:
- shell: whoami
register: c
- shell: whoami
become: yes
register: d
- shell: whoami
become: yes
become_user: myuser
become_method: su
register: e
- debug: var=c.stdout
- debug: var=d.stdout
- debug: var=e.stdout
当我运行 ansible 脚本时,我得到以下信息:
TASK [myscript : debug] *************************************************************************************************************************************************
ok: [10.33.56.93] => {
"c.stdout": "root"
}
TASK [myscript : debug] *************************************************************************************************************************************************
ok: [10.33.56.93] => {
"d.stdout": "root"
}
TASK [myscript : debug] *************************************************************************************************************************************************
ok: [10.33.56.93] => {
"e.stdout": "root"
}
我是否误解了 become_user
的工作原理?有没有其他方法可以让我的命令以特定用户身份运行?
如果这很重要,我将使用 ansible 2.9.18。
谢谢
解决方法
尝试添加
become_method: su
使用特定用户可能会有所帮助。我不确定,它可能有帮助
,become_user
是您在这里需要的主要部分。
您看到 root
出现在第一个任务中,因为您以 root
的身份运行剧本,这很好。
另外两个任务是 root
,因为您正在为每个任务提供权限提升,这将覆盖您正在设置的 become_user
。您只需删除 become: yes
并切换用户即可。
---
- hosts: localhost
become: yes
tasks:
- shell: whoami
register: c
- shell: whoami
become_user: myuser
register: d
- debug: var=c.stdout
- debug: var=d.stdout