如何在 Ansible 中使用双 `sudo` 而不需要密码来进行 `root` 访问?

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

我以我的用户身份登录服务器(CentOS 7)并执行双

sudo
成为
root
。此时不需要密码。

命令

sudo sudo su

我需要使用 Ansible 作为

root
用户在此类服务器上安装应用程序。

不幸的是,当我尝试遵循它时,它给出了:

"msg": "Timeout (12s) waiting for privilege escalation prompt: "
---
- name: Copy file
  hosts: all

  become: true
  become_method: su

  tasks:

   - name: Copy file
     copy:
      src: abc.txt
      dest: /tmp/

我尝试过其他版本,例如将

become_method
更改为
sudo
等。但它们不起作用。

有什么建议可以帮忙吗?

ansible centos7
1个回答
0
投票

如何在 Ansible 中使用双

sudo

(1)

根据成为指令,人们可以简单地使用

become_flags

一个最小的示例手册

---
- hosts: localhost
  become: true
  become_method: sudo
  become_flags: 'sudo'
  gather_facts: false

  tasks:

  - shell:
      cmd: pstree
    register: result

  - debug:
      var: result

将产生

的输出
ansible-playboo-+-ansible-playboo---sh---sudo---sudo---sh---python2---pstree
                `-{ansible-playboo}

如果没有旗帜,它将是一个

sudo

ansible-playboo-+-ansible-playboo---sh---sudo---sh---python2---pstree
                `-{ansible-playboo}

(2)

您可以创建自己的定制

become
插件

类似问答


Ansible 无需密码即可进行

root
访问?

(3)

正如 已经在评论中提到并确认的那样 ,这与 Ansible 本身无关,而是与 管理

sudo
访问有关。很简单,通过配置即可解决
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
中没有条目。

类似问答

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