在通过Ansible执行命令之前切换到root(使用“sudo su - ”)

时间:2015-12-02 18:17:33

标签: linux ansible sudo

TL; DR:在执行所需命令之前,有没有办法让Ansible执行“sudo su - ”(而不是“sudo su - root”)?

我有一台通常使用Ansible管理的远程服务器。问题是我有一个非常严格的命令列表,我可以使用sudo执行。

幸运的是,我实际上可以做“sudo su - ”来获得root shell,但我无法找到Ansible这样做的方法。

根据我的理解,我可以成为root,但Ansible发出的“sudo su - root”不适合我。

我一直在搞乱sudo并成为参数,但找不到让我觉得它可能不起作用的解决方案,所以问题是:

这可行吗?

2 个答案:

答案 0 :(得分:1)

lib/ansible/utils/__init__.py中,请参阅make_sudo_cmd功能,尤其是以下行:

sudocmd = '%s -k && %s %s -S -p "%s" -u %s %s -c %s' % (
    C.DEFAULT_SUDO_EXE, C.DEFAULT_SUDO_EXE, C.DEFAULT_SUDO_FLAGS,
    prompt, sudo_user, executable or '$SHELL', pipes.quote('echo %s; %s' % (success_key, cmd)))

现在,人们可能希望简单地通过你的剧本传递sudo_user的空字符串就足够了;但是,在某些中间层,如果其值为false,则默认为root(而在Python中,空字符串确实是假的)。因此,您需要对此代码进行更具侵略性的修改。

一个选项(我认真考虑)是用你自己生成的命令的包装器替换DEFAULT_SUDO_EXE(在常量模块中,这里给出为C)。另一个是将sudo_user替换为(sudo_user if (sudo_user and sudo_user != 'root') else '')

答案 1 :(得分:0)

这个对我有用:

- hosts: application
  become: yes
  become_exe: "sudo su -"
  become_method: su
  tasks: