linux Ansible:如何在没有'become'的地方运行使用'sudo'的脚本:真的吗?

q9rjltbz  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(94)

我试图通过Ansible为一个程序运行shell脚本安装程序。
该脚本做了一些假设,即获取非sudo命令的登录用户,并在需要时通过sudo获取root用户。
然而,在Ansible中,我只能让相同的脚本做两件事之一:
1.在没有become: true的情况下运行->**结果:**脚本的sudo部分失败(“需要终端来读取密码;要么使用-S选项从标准输入中读取,要么配置一个askpass助手”)
1.使用become: true->**结果:**脚本的非sudo部分中断,当我实际需要它们使用登录用户时,使用root作为用户
有没有什么方法可以让Ansible的行为与典型的shell类似(当脚本调用sudo时,只在需要时才变成root)?

ldioqlga

ldioqlga1#

正如在评论中已经提到的,这与Ansible本身无关,而是与Managing sudo access有关。通过配置sudoers解决这个问题非常简单。
假设用户ansible_user是本地组wheel的成员,或者在其中一个文件中有自己的sudoers条目

/etc/sudoers

%wheel                                ALL=(ALL)       NOPASSWD: ALL
ansible_user                          ALL=(ALL)       NOPASSWD: ALL

或**/etc/sudoers.d/ansible_user**

ansible_user                          ALL=(ALL)       NOPASSWD: ALL

一个最小的例子剧本

---
- hosts: localhost
  become: false
  gather_facts: false

  tasks:

  - shell:
      cmd: who; id; sudo id
    register: result

  - debug:
      var: result

执行通过

sshpass -p ${PASSWORD} ansible-playbook --user 'ansible_user' --ask-pass who.yml

将导致输出

ASK [debug] **********************************************************************************************
ok: [localhost] =>
  result:
    changed: true
    cmd: who; id; sudo id
    delta: '0:00:00.110247'
    end: '2023-10-10 09:00:00.110247'
    failed: false
    msg: ''
    rc: 0
    start: '2023-10-10 09:00:00.000000'
    stderr: ''
    stderr_lines: []
    stdout: |-
      ansible_user pts/0        2023-10-10 09:00 (192.0.2.1)
      uid=123456789(ansible_user) gid=1234560513(domain users) groups=1234560513(domain users) <omitted>
      uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

在所示的示例中,用户ansible_user根本不存在于本地,因为系统已连接并加入到域,所以/etc/passwd/etc/group/etc/shadow中没有条目。

相关问题