我需要登录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”,剧本无法解析,需要取消。
答案 0 :(得分:0)
使用become: true
和become_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