Dav*_*avB 16 privileges sudo ansible
我已经设置了一个david具有sudo权限的用户的盒子.我可以进入框中并执行sudo操作apt-get install.当我尝试使用Ansible的"成为特权升级"做同样的事情时,我收到一个permission denied错误.所以一个简单的剧本可能看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
我使用以下命令运行此playbook:
ansible-playbook -i inventory simple_playbook.yml --ask-become-pass
Run Code Online (Sandbox Code Playgroud)
这给了我一个密码的提示,我给出了,我得到以下错误(缩写):
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", ...}
Run Code Online (Sandbox Code Playgroud)
为什么我被拒绝了?
附加信息
我正在运行Ansible 2.1.1.0并且我的目标是Ubuntu 16.04.如果我按照Ansible <v1.9 使用remote_user和sudo选项,它可以正常工作,如下所示:
remote_user: david
sudo: yes
更新
本地和远程用户名是相同的.为了实现这一点,我只需要指定become: yes(参见@ techraf的答案):
tec*_*raf 28
为什么我被拒绝了?
因为APT 需要 root权限(请参阅错误:),are you root?并且您正在运行任务david.
根据这些设置:
become: true
become_user: david
become_method: sudo
Run Code Online (Sandbox Code Playgroud)
Ansible成为david使用sudo方法.它基本上sudo david在前面运行它的Python脚本.
远程盒子上的用户'david'具有sudo权限.
这意味着david可以使用sudo-executable 执行命令(部分或全部)来更改子进程(命令)的有效用户.如果没有给出用户名,则此过程将作为root帐户运行.
比较这两个命令的结果:
$ sudo whoami
root
$ sudo david whoami
david
Run Code Online (Sandbox Code Playgroud)
回到APT问题,您(从CLI)以及Ansible(使用您的帐户使用SSH连接)需要运行:
sudo apt-get install sqlite3
Run Code Online (Sandbox Code Playgroud)
不:
sudo david apt-get install sqlite3
Run Code Online (Sandbox Code Playgroud)
这将失败显示Ansible非常确切的消息.
默认情况下,以下playbook将升级为root用户:
---
- name: Testing...
hosts: all
become: true
tasks:
- name: Just want to install sqlite3 for example...
apt: name=sqlite3 state=present
Run Code Online (Sandbox Code Playgroud)
remote_user是david。调用脚本--ask-pass并提供密码david。如果david没有无密码 sudo,那么您也应该使用--ask-become-pass.
- name: Testing...
hosts: all
remote_user: david
become: true
become_method: sudo
tasks:
- name: Just want to install sqlite3 for example...
apt: name=sqlite3 state=present
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39522 次 |
| 最近记录: |