我正在尝试使用 Ansible 在多台远程计算机上自动安装和设置软件。我在计算机上的个人用户帐户已被锁定,但我可以sudo su -在手动登录时成为 root 用户。一旦我成为 root 用户,我就可以运行类似yum install git的命令。
当我尝试通过 Ansible 执行此操作时,我尝试了以下操作来使用 Ansible 的yum模块:
- name: install Git
yum:
name: git
state: present
become: yes
become_method: sudo
become_user: root
become_exe: "sudo su -"
Run Code Online (Sandbox Code Playgroud)
当我运行此命令时,它失败并出现错误,指出不允许我的用户运行该命令
sudo su - root /tmp/foobarbazblablabla
Run Code Online (Sandbox Code Playgroud)
发生的情况是,Ansible 将所有 Yum 命令放入临时脚本文件中,然后尝试使用变为方法/exe 来运行该文件。
事实证明,我的用户有权运行sudo su -,但不能使用sudo或运行任意脚本sudo su -,因此 Ansible 无法运行上述内容。
我最终使用了一个丑陋的解决方法,如下所示:
- name: install Git
shell:
cmd: |
sudo su - <<EOF
yum install -y git
EOF
Run Code Online (Sandbox Code Playgroud)
这可行,但很丑陋,并且不使用 Ansible 的幂等检查机制。
在 Ansible 中是否有更好的方法来执行此操作,其中 Ansiblesudo su -首先执行第一个命令,然后在打开的子 shell 中执行其命令集?还是我运气不好?我怀疑安全团队是否会授予我的用户使用sudo. (另一方面,问一下可能也没什么坏处。)
这是对类似问题的描述,但建议的解决方案与我上面使用的丑陋黑客相同: https: //gist.github.com/nanobeep/3b3d614a709086ff832a
此错误的又一个实例,与我得到的非常相似的错误:https ://www.reddit.com/r/devops/comments/53hukf/ansible_centrify_become_root/
fatal: [hostname]: FAILED! => {"changed": false, "failed": true, "module_stderr": "",
"module_stdout": "Sorry, user username is not allowed to execute
'/bin/sh -c echo BECOME-SUCCESS-msylkobbkasuuxlawgqppdpjxmeqirgd; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
/usr/bin/python /home/username/.ansible/tmp/ansible-tmp-1474243234.94-154392424015843/lineinfile; rm -rf \"/home/username/.ansible/tmp/ansible-tmp-1474243234.94-154392424015843/\" > /dev/null 2>&1'
as root on hostname.\r\n", "msg": "MODULE FAILURE", "parsed": false}
Run Code Online (Sandbox Code Playgroud)
更新如果我运行sudo -l,将显示以下内容:
User foo may run the following commands on this host:
(root) /bin/kill
(root) /bin/su - bar
(root) su -
Run Code Online (Sandbox Code Playgroud)
我对 也有类似的问题teamviewer passwd,这不允许我与become: true任何一个一起运行。这是我的任务定义,使用 ansible 设置 teamviewer 密码:
- name: set teamviewer login to password only
become: true
become_method: sudo
become_flags: 'su - root /bin/bash -c'
command: 'teamviewer passwd {{ teamviewer_password }}'
Run Code Online (Sandbox Code Playgroud)
这将运行:
sudo su - root /bin/bash -c 'teamviewer passwd Th3Passw0r8'
Run Code Online (Sandbox Code Playgroud)
作为旁注:become_*如果您使用shell-task 而不是 ,则可以跳过 -stuff command。但随之而来的是 ansible 警告和更糟糕的情况:用你的密码逃离地狱。别去那里。
我认为这将与
- name: install Git
yum:
name: git
state: present
become: yes
become_method: sudo
become_exe: "sudo su - /bin/bash -c"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19470 次 |
| 最近记录: |