TL; DR:在执行所需命令之前,有没有办法让Ansible执行“sudo su - ”(而不是“sudo su - root”)?
我有一台通常使用Ansible管理的远程服务器。问题是我有一个非常严格的命令列表,我可以使用sudo执行。
幸运的是,我实际上可以做“sudo su - ”来获得root shell,但我无法找到Ansible这样做的方法。
根据我的理解,我可以成为root,但Ansible发出的“sudo su - root”不适合我。
我一直在搞乱sudo并成为参数,但找不到让我觉得它可能不起作用的解决方案,所以问题是:
这可行吗?
答案 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: