我有一个奇怪的问题,经过多次搜索后,我无法找到答案。 这是一个非常简单的案例。
当前有一台linux机器,有用户x和用户y。当我手动登录用户 x 时,我可以使用以下命令切换用户 y 无密码:“sudo su - y”。
现在回到ansible。
tasks:
- name: test task
shell: echo "this is a test"
become: true
become_user: y
此任务将使用用户 x 连接到计算机。要运行 echo,它会变成 y。对于这种情况我得到: "module_stdout": "sudo: 需要密码 ”,
对于用户 y,我提供了一个带有 /bin/sh * 的 sudoers 文件,也不起作用。 有人有想法吗?
提前致谢。
要使用
sudo su -
,您可能必须添加 become_flags
,如下所示:
tasks:
- name: test task
shell: echo "this is a test"
become: true
become_method: "sudo"
become_flags: "su -"
become_user: y
如果这不起作用,可以尝试其他方法:
tasks:
- name: test task
shell: echo "this is a test"
become: true
become_method: "sudo"
become_flags: "su - -c"
become_user: y
通过将
-c
标志添加到 su
,您也许能够解决 Ansible 如何运行 become
命令。实际上,Ansible 并不是执行两步(sudo su - y
,然后运行命令),而是以 sudo ... foobarbaz.py
的形式运行一个命令,其中 foobarbaz.py
是包含 shell 步骤的脚本(在本例中是echo
命令)。
要实现此功能,您必须确保您的
sudoers
文件包含一个允许用户运行类似操作的条目(如果您查看 sudo -l
的输出):
su - -c *
为了让 Ansible 使用
sudo su - <username>
(有或没有密码),我的同事想出了 pipe_to_su
插件:
https://gist.github.com/ZbigniewRA/89b70da91c1329a87398387bebdeac64
使用方法:
become_plugins/pipe_to_su.py
,vars
:ansible_become_method: pipe_to_su
ansible_become_exe: sudo su
ansible_become_flags: '-'
ansible_become_user: '<username>'
ansible_become: yes
ansible_become_password: '' # Put a password here, or leave empty for no password.