如何在ansible中成为特定用户

How to become a specific user in 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