如何在ansible中成为特定用户

问题描述

我正在尝试在以 ansible 作为特定用户的系统上运行命令。

我以该特定用户身份运行很重要,因为该命令需要工作的配置文件仅对该用户可用。任何其他用户将无法读取配置文件,因此将无法工作。

我正在尝试使用 ansible 的 become_userbecomebecome_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