Ansible:如何在不变为:true 的地方运行使用 sudo 的脚本?

问题描述 投票:0回答:1

我正在尝试通过 Ansible 运行程序的 shell 脚本安装程序。

该脚本做了一些假设,即在需要时通过 sudo 获取非 sudo 命令的登录用户和 root 用户。

但是,在 Ansible 中,我只能使用相同的脚本来执行以下两件事之一:

  1. 不使用

    become: true
    运行 -> 结果: 脚本的 sudo 部分失败(“需要终端来读取密码;使用 -S 选项从标准输入读取或配置askpass 帮助程序”)

  2. 使用

    become: true
    运行 -> 结果: 脚本的非 sudo 部分中断,当我实际需要它们使用登录用户时,使用“root”作为用户

有没有办法让 Ansible 的行为与典型的 shell 类似(当脚本调用

root
时,纯粹根据需要变成
sudo
)?

linux ansible sudo
1个回答
0
投票

正如评论中已经提到的,这与 Ansible 本身无关,而是与 管理

sudo
访问有关。

假设用户

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
中没有条目。

© www.soinside.com 2019 - 2024. All rights reserved.