Ansible Become_user 要求输入密码,即使它配置为无密码

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

我有一个奇怪的问题,经过多次搜索后,我无法找到答案。 这是一个非常简单的案例。

当前有一台linux机器,有用户x和用户y。当我手动登录用户 x 时,我可以使用以下命令切换用户 y 无密码:“sudo su - y”。

现在回到ansible。

tasks:
- name: test task
  shell: echo "this is a test"
  become: true
  become_user: y

此任务将使用用户 x 连接到计算机。要运行 echo,它会变成 y。对于这种情况我得到: "module_stdout": "sudo: 需要密码 ”,

对于用户 y,我提供了一个带有 /bin/sh * 的 sudoers 文件,也不起作用。 有人有想法吗?

提前致谢。

ansible
2个回答
1
投票

要使用

sudo su -
,您可能必须添加
become_flags
,如下所示:

tasks:
- name: test task
  shell: echo "this is a test"
  become: true
  become_method: "sudo"
  become_flags: "su -"
  become_user: y

如果这不起作用,可以尝试其他方法:

tasks:
- name: test task
  shell: echo "this is a test"
  become: true
  become_method: "sudo"
  become_flags: "su - -c"
  become_user: y

通过将

-c
标志添加到
su
,您也许能够解决 Ansible 如何运行
become
命令。实际上,Ansible 并不是执行两步(
sudo su - y
,然后运行命令),而是以
sudo ... foobarbaz.py
的形式运行一个命令,其中
foobarbaz.py
是包含 shell 步骤的脚本(在本例中是
echo
命令)。

要实现此功能,您必须确保您的

sudoers
文件包含一个允许用户运行类似操作的条目(如果您查看
sudo -l
的输出):

su - -c *

0
投票

为了让 Ansible 使用

sudo su - <username>
(有或没有密码),我的同事想出了
pipe_to_su
插件: https://gist.github.com/ZbigniewRA/89b70da91c1329a87398387bebdeac64

使用方法:

  • 您需要将该脚本放入
    become_plugins/pipe_to_su.py
    ,
  • 将以下内容添加到库存文件(或您的剧本)中的
    vars
ansible_become_method: pipe_to_su
ansible_become_exe: sudo su
ansible_become_flags: '-'
ansible_become_user: '<username>'
ansible_become: yes
ansible_become_password: '' # Put a password here, or leave empty for no password.
© www.soinside.com 2019 - 2024. All rights reserved.