如何根据任务或任务集切换用户?

2024-04-11

我的 ansible 手册中反复出现的主题是我经常必须使用 sudo 权限执行命令(sudo: yes)因为我想为某个用户执行此操作。理想情况下,我宁愿使用 sudo 切换到该用户并正常执行命令。因为这样我就不必执行通常的后命令清理工作,例如 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 该用户。


使用 Ansible 1.9 或更高版本

Ansible 使用become, become_user, and become_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.

该指令在使用它的块的范围内有效(examples https://stackoverflow.com/a/37207067/807730).

See 主机和用户 http://docs.ansible.com/ansible/playbooks_intro.html#hosts-and-users一些额外的例子和成为(权限提升) http://docs.ansible.com/ansible/become.html以获得更详细的文档。

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

  • 命令行选项 http://docs.ansible.com/ansible/latest/user_guide/become.html#command-line-options对于等效的become/become_user指令。
  • 连接特定变量 http://docs.ansible.com/ansible/become.html#connection-variables可以为每个主机或组设置。

从 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据任务或任务集切换用户? 的相关文章

  • 如何使用Vault在Ansible v2中运行playbook api

    这是我所拥有的 我知道这无需加密即可运行 并且我可以运行 ansible vault 编辑 common yml with ANSIBLE VAULT PASSWORD FILE vault pass txt 在环境中设置 from col
  • Git 克隆中的 Ansible 和 Git 权限被拒绝(公钥)

    我有一本剧本 我试图从私人存储库 GIT 克隆到服务器 我已经设置了 ssh 转发 当我 ssh 进入服务器并尝试从同一存储库手动克隆时 它成功工作 但是 当我使用 ansible 将存储库克隆到服务器时 它失败并显示 权限被拒绝公钥 这是
  • Ansible:将命令参数作为列表传递

    我想将多个参数作为列表存储在变量中 vars my args verbose quiet verify 然后将列表作为带引号的参数传递给命令 最明显的是join过滤器没有按我的预期工作 它生成包含所有列表元素的单个单词 而不是每个列表元素一
  • 反向运行 Ansible 循环

    我正在编写一本 ansible playbook 在一次 play 中 我尝试使用我自己的模块 NodeModule 使用 UUID 删除一些节点 所有节点是一个包含节点 UUID 的列表 name Remove OSNs NodeModu
  • 具有多个 SSH 密钥对的 Ansible

    我是 Ansible 的新手 我能够对其进行测试并且其工作正常 符合我的测试要求 为了在管理节点和客户端节点之间建立连接 我使用已经创建的 ssh 密钥对 如何使用具有不同 SSH 密钥对的另一个节点 作为参考 我正在考虑 3 个具有不同密
  • 在 Ansible 的字典列表中搜索键 [重复]

    这个问题在这里已经有答案了 我有一个类似于以下内容的字典列表 subnets name subnet1 name34554 address 192 168 1 100 id id1 name subnet2 name67678 addr 1
  • 如何在ansible中为变量分配随机数?

    这是一个 ansible 脚本 我希望它能打印出相同的随机数 3 次 相反 它打印出三个随机数 如何将随机数分配给 ansible 中的变量 以便它在整个剧本中固定 name Test random filter hosts localho
  • 如何删除或排除 Ansible 模板列表中的项目?

    我正在编写一个 Ansible 模板 需要生成主机组中的 IP 列表 排除当前主机IP 我在网上和文档中进行了搜索 但找不到任何允许您删除列表中项目的过滤器 我在下面创建了 hacky for循环来执行此操作 但想知道是否有人知道这样的过滤
  • 获取 Ansible 控制机 IP 地址的最佳方法

    我正在使用 Ansible 和ufw在我的服务器上设置防火墙 作为ufw规则 我希望允许来自 Ansible 控制机的 SSH 但不允许来自其他任何地方 我的问题是 获取控制机本身的 IP 地址以便我可以将其放入规则中的最佳方法是什么 我知
  • 将变量内容复制到事实中后,Ansible 会抛出错误

    我有变量 其中包含带有其他模板引擎标记的字符串 不幸的是它们是三个花括号 如果我直接使用这些变量 一切都很好 如果我将它们复制到事实中以便随后修改它们 Ansible 会抛出错误 示例剧本 hosts localhost connectio
  • jenkins 管道中的该模块需要 boto3 和 botocore

    我正在尝试通过 jenkins groovy 脚本运行 ansible playbook 但不断收到错误 boto3 is required 我已经安装了 boto3 pip list boto grep boto boto3 1 20 3
  • ansible 有 yaml 编辑模块吗?

    我需要修改 yaml 文件 施洛德配置 http schleuder2 nadir org documentation v2 2 index html 并且我想从 ansible 剧本中执行此操作 是否有模块可以执行此操作 很难用谷歌搜索这
  • Ansible:权限被拒绝(公钥、密码)

    我无法连接到 Ansible 中的主机 这是错误 192 168 1 12 无法到达 gt 改变 假 msg 错误 SSH 在连接过程中遇到未知错误 我们建议您使用 vvvv 重新运行该命令 这会导致 将启用 SSH 调试输出以帮助诊断问题
  • 根据磁盘可用空间获取节点IP

    我正在尝试编写一个 Ansible 剧本来检查多个服务器上的磁盘空间 到目前为止 这是我的 Ansible 剧本 hosts all become yes tasks name Check freespace shell df h awk
  • Ansible Expect 模块无法匹配字符串/正则表达式脚本问题

    我正在尝试通过 Ansible 在 Vagrant 机器中自动安装脚本 我尝试了很多方法在网络上寻找解决方案 但文档和示例非常薄弱 我试图安装的脚本提示了我试图以编程方式回答的问题Ansible 期望模块 Ansible 任务 名称 运行
  • 无法在守护进程模式下运行 Ansible

    我可以运行 Ansible 像守护进程一样管理我的主机吗 例如 我有时会更改我的剧本 但我不想手动运行 ansible playbook main yml 请不要建议 crontab 有一个特定的点 我不能在生产服务器上使用 crontab
  • 安西布尔。覆盖单个字典键[重复]

    这个问题在这里已经有答案了 我使用 ansible 来管理生产和 vagrant box 的配置 我有带有默认值的文件 组变量 全部 env prod wwwuser www data db root pwd root pwd pdo dr
  • 从上一个任务获取更改/失败的主机列表 |安西布尔

    All 示例 如果我有 20 个主机用于剧本并使用 Serial 10 运行它们 则以下 shell 命令一次在 10 个主机上运行 完成后 将调用处理程序任务 其中创建 dict dict 的任务不会提供字典输出 因此第二个任务 失败的主
  • 如何从 Ansible 中的指定组中删除用户?

    我们假设user01定义了两个组 groupA and groupB 除了主要组之外 我可以将帐户添加到groupC 确保user01属于groupC using user name user01 groups groupC append
  • 带变量的 ansible regex_search

    如何在ansible playbook中使用正则表达式查找匹配项 其中变量出现在regex search争论 以下剧本在使用以下命令运行时找不到匹配项 ansible playbook playbook yml hosts localhos

随机推荐