将ansible与Oracle Linux“ sudo -s”一起使用

时间:2019-03-29 01:04:49

标签: ansible sudo

我需要登录Oracle Linux系统并以root身份运行供应商应用程序的命令。在测试了SSHing并手动运行过程之后,我现在使用Ansible进行编排。

我必须使用证书以另一个用户“ admin”的身份登录,然后按照供应商的说明键入“ sudo -s”以成为root用户,然后才能运行shell脚本。因为我使用的是证书,所以不需要键入密码即可升级

我发现“ become:yes”不适用于“ sudo -s”。

我尝试使用“ raw”,“ shell”和“ command” ansible模块绕过该问题,但是它们超时,因为他们可能期望得到答案。

这是输出

TASK [run bash system status] **************************************************
fatal: [server-sandpit]: FAILED! => {"changed": true, "msg": "non-zero return code", "rc": 3, "stderr": "Shared connection to server-sandpit closed.\r\n", "stderr_lines": ["Shared connection to server-sandpit closed."], "stdout": "This script cannot be run under sudo, try running under 'sudo -s'\r\n", "stdout_lines": ["This script cannot be run under sudo, try running under 'sudo -s'"]}

这是剧本:

---
- hosts: sl-aio-sandpit

  tasks:
    - name: run bash system status
      script: system_status.sh
      args:
        executable: bash
      become: yes

请注意,我不能仅在ssh中使用sudo运行脚本:

[admin@server-sandpit tmp]$ sudo ./system_status.sh
This script cannot be run under sudo, try running under 'sudo -s'

我要么得到上面的错误,要么对于某些变通方法,例如使用“ shell”或“ command”,剧本无法解析,需要取消。

1 个答案:

答案 0 :(得分:0)

使用become: truebecome_method: sudo(默认)时,我不知道有任何方法可以控制传递给sudo的选项。

由于您需要先sudo -s,然后在第二个命令中运行脚本,所以可以尝试以下解决方案

---
- hosts: sl-aio-sandpit
  remote_user: admin

  tasks:

    - name: copy script to remote machine
      copy:
        src: system_status.sh
        dest: /path/to/your/system_status.sh
        mode: 0750

    - name: run bash system status with sudo -s
      shell: |
        sudo -s
        /path/to/your/system_status.sh