Ansible:无法配置sudo命令,即使是become_user也是sudo用户

时间:2017-12-29 05:46:05

标签: ansible

testuser是一个sudo用户,

sudo cat /etc/sudoers.d/90-cloud-init-testuser
testuser ALL=(ALL) NOPASSWD:ALL

我可以手动登录testuser并在没有密码的情况下运行以下命令:

sudo -H apt-get update
sudo -H apt-get upgrade

但如果我运行以下ansible代码,虽然我看到whoami命令返回testuser,然后代码因致命错误而停止(请参阅下面的代码和错误)。

我必须将root_user设置为root才能运行(请参阅我注释掉的行)?注意我可以手动登录testuser并运行sudo命令,我不能使用become_user = testuser来安装apt吗?注意我认为remote_user无关紧要因为whoami命令只依赖于become_user.in事实上我觉得remote_user没用,它只是登录我。如果未设置become_user。然后whoami成为root,如果将become_user设置为testuser,那么whoami将成为testuser。

- hosts: all
  remote_user: ubuntu
  become: yes
  become_user: testuser
  gather_facts: yes
  become_method: sudo
  tasks:
  - name: test which user I am
    shell: whomami
    register: hello
  - debug: msg="{{ hello.stdout }}"
  - name: Update and upgrade apt.
#    become_user: root
#    become: yes
    apt: update_cache=yes upgrade=dist cache_valid_time=3600

TASK [Update and upgrade apt.]     
********************************
fatal: [XX.XX.XX.XX]: FAILED! => {"changed": false, "msg": 

"'/usr/bin/apt-get dist-upgrade' failed: E: Could not open lock file     
/var/lib/dpkg/lock - open (13: Permission denied)\nE: Unable to lock  
the administration directory (/var/lib/dpkg/), are you root?\n", "rc": 
100, "stdout": "", "stdout_lines": []}

1 个答案:

答案 0 :(得分:3)

您需要使用具有sudo权限的帐户连接 - 在您的情况下testuser - 然后使用提升的权限(become: true和默认的become: root)运行播放/任务,所以:

  • ubuntu添加sudo权限,
  • 或与testuser联系。

sudo不会像你暗示的那样起作用。

任何命令都在特定用户的上下文中运行 - testuserubunturoot。没有像" sudo testuser"那样运行命令。

sudo以不同的用户身份执行命令(默认情况下为root)。执行sudo的用户必须具有适当的权限。

  • 如果您以testuser身份登录并执行sudo -H apt-get update,那么(几乎 * )就像您以root身份登录一样跑apt-get update

  • 如果您以ubuntu身份登录并运行sudo -u testuser apt-get update(这是问题中Ansible任务的shell副本) - 它(几乎是 * )就像您使用testuser登录并运行apt-get update一样。

    运行testuser

    apt-get update会出错 - 这就是你得到的。

* "几乎",因为它取决于有关环境变量的设置 - 与此处的问题无关。