become_user: root
放在该块上,并将become_user: <other-user>
放在该块内的任务上,但是Ansible似乎覆盖了该块的定义,而不是像我希望的那样嵌套sudo调用。也曾在StackOverflow上被问过,但是由于没有解决方案,我想我会在这里重新发布它,我认为这是一个更好的网站。#1 楼
我遇到了同样的情况。我的机器有login1
,无密码sudo和login2
,我应该在其中执行一些操作。我没有用解决的办法解决它。但是我做了这样的解决方法:- name: "Install nvm"
shell: sudo -u buildkite-agent bash -c "<my commands to be performed on behalf of buildkite-agent>"
become: true
这种情况:
buildkite-agent
的家,即使用/root
作为家。#2 楼
在游戏级别成为超级用户,在任务级别成为另一个用户:- hosts: all
become: yes
tasks:
- file:
path: /tmp/test
state: touch
become_user: www-data
验证:
$ ls -l /tmp | grep test
-rw-r--r-- 1 www-data www-data 0 Mär 10 14:08 test
对于非常简单的情况,类似以下的变通方法也可能会有所帮助,但这并不能真正扩展,因为您无法通过此策略使用ansible模块: >输出(摘录):
"stdout": "www-data"
评论
我尝试了您的第一个建议(以及类似的带有块的内容),但是Ansible似乎覆盖了命令,而不是嵌套命令(因此,它本质上将sudo -u root替换为sudo -u www-data,而不是嵌套到创建sudo -u root sudo -u www-data)。我认为使用命令/ shell进行手动调整以及使用文件模块仔细许可是目前在Ansible中唯一可行的方法。
–熊佳亚诺夫
18-3-12在21:37
@XiongChiamiov,很奇怪,对我有用(如从ls -l / tmp命令可以看到的)。我正在使用ansible 2.4.2.0。但是,您没有ansible_user的无密码sudo吗?
–文森佐·皮(Vincenzo Pii)
18年3月13日在12:27
ansible_user对根帐户具有无密码的sudo,但对第三级帐户(在您的示例中为www-data)没有。
–熊佳亚诺夫
18年3月19日在16:36
#3 楼
我所做的对我有用:- name: launch pg_ctl start
command: "su <USER> -l -c '<COMMAND>'"
become: yes
become_exe: sudo
PS:使用
su -l
时,它将自动加载.bash_profile
而不是.bashrc
#4 楼
例如,您要创建一个文件,可以使用: name: Create file
shell: "touch abc"
become_user: <username>
become: yes
这等效于::
sudo su username -c“ touch abc”
评论
不,它等效于“ sudo -u用户名”,正如问题中所述,该名称稍有不同但很重要。
–熊佳亚诺夫
18年3月12日在16:47
当您运行上述Ansible时,文件abc将由username变量中提到的用户创建
–user7155093
18 Mar 12 '18 at 17:05
是的,但是您缺少问题的要点,那就是sudoers配置不允许默认的ansible用户直接对最终用户进行sudo。
–熊佳亚诺夫
18年3月12日在21:33
评论
我的用户无法在没有密码的情况下直接向第三个用户sudo-是在ansible下还是直接在shell中?@DanCornilescu通常根据sudoers配置。
也许将sudo“ sudo -u target_user命令”作为命令?
@Xiong Chiamiov,您找到适合您的解决方法了吗?我有完全一样的问题:(