小编典典

如何为每个任务或一组任务切换用户?

all

我的 ansible 剧本中反复出现的一个主题是,我经常必须使用 sudo 权限 ( sudo: yes)
执行命令,因为我想为某个用户执行此操作。理想情况下,我宁愿使用 sudo 切换到该用户并正常执行命令。因为这样我就不必执行我通常的 post
命令清理了,例如 chowning 目录。这是我的一本剧本的片段:

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  sudo: yes
- name: change perms
  file: dest={{ dst }} state=directory mode=0755 owner=some_user
  sudo: yes

理想情况下,我可以以不同的用户身份运行命令或命令集,即使它需要 sudo 来 su 到该用户。


阅读 116

收藏
2022-08-07

共1个答案

小编典典

使用 Ansible 1.9 或更高版本

Ansible
使用becomebecome_userbecome_method指令来实现权限提升。您可以将它们应用于整个剧本或剧本,将它们设置在包含的剧本中,或将它们设置为特定任务。

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  become: yes
  become_user: some_user

您可以使用become_with指定如何实现权限提升,默认为sudo.

该指令在使用它的块的范围内有效(示例)。

有关其他示例,请参阅主机和用户,有关更详细的文档,请参阅成为(特权升级)

除了任务范围becomebecome_user指令之外,Ansible 1.9
添加了一些新变量和命令行选项,以便在没有显式指令的情况下在播放期间设置这些值:

从 Ansible 2.0.2.0 开始,下面描述的旧sudo/sudo_user语法仍然有效,但弃用通知指出,“此功能将在未来的版本中删除。”


以前的语法,自 Ansible 1.9 起已弃用并计划删除:

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  sudo: yes
  sudo_user: some_user
2022-08-07