微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ansible非root sudo用户和“成为”特权升级

我已经设置了一个包含sudo权限的用户david的方框.我可以进入框中并执行像apt-get install这样的sudo操作.当我尝试使用Ansible的“成为特权升级”做同样的事情时,我得到一个权限被拒绝错误.所以一个简单的剧本可能看起来像这样:

simple_playbook.yml:

---
- name: Testing...
  hosts: all
  become: true
  become_user: david
  become_method: sudo

  tasks:
    - name: Just want to install sqlite3 for example...
      apt: name=sqlite3 state=present

我使用以下命令运行此playbook:

ansible-playbook -i inventory simple_playbook.yml --ask-become-pass

这给了我一个密码的提示,我给出了,我得到以下错误(缩写):

fatal: [123.45.67.89]: Failed! => {...
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",...}

为什么我被拒绝了?

附加信息

我正在运行Ansible 2.1.1.0并且我的目标是Ubuntu 16.04.如果我按照Ansible<使用remote_user和sudo选项v1.9,它工作正常,像这样: remote_user:david
sudo:是的

更新

本地和远程用户名是相同的.为了使这个工作,我只需要指定成为:是(请参阅@ techraf的答案):

解决方法

Why am I getting permission denied?

因为APT需要root权限(请参阅错误:你是root用户吗?)并且您正在以david身份运行任务.

根据这些设置:

become: true
become_user: david
become_method: sudo

Ansible使用sudo方法成为大卫.它基本上使用sudo david运行其Python脚本.

the user ‘david’ on the remote Box has sudo privileges.

这意味着david可以使用sudo-executable执行命令(部分或全部)来更改子进程(命令)的有效用户.如果没有给出用户名,则此进程以root帐户运行.

比较这两个命令的结果:

$sudo whoami
root
$sudo david whoami
david

回到APT问题,您(从CLI)以及Ansible(使用您的帐户使用SSH连接)需要运行:

sudo apt-get install sqlite3

不:

sudo david apt-get install sqlite3

这将失败显示Ansible非常确切的消息.

认情况下,以下playbook将升级为root用户

---
- name: Testing...   
  hosts: all
  become: true

  tasks:
    - name: Just want to install sqlite3 for example...
      apt: name=sqlite3 state=present

原文地址:https://www.jb51.cc/linux/394613.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐