【发布时间】:2016-12-05 21:28:58
【问题描述】:
我设置了一个用户 david 的盒子,他拥有 sudo 权限。我可以通过 ssh 进入盒子并执行像 apt-get install 这样的 sudo 操作。当我尝试使用 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
我使用以下命令运行此剧本:
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 选项,它可以正常工作,如下所示:
remote_user: david
sudo: yes
更新
本地和远程用户名相同。为了让它工作,我只需要指定become: yes(见@techraf的回答):
【问题讨论】:
-
用户名是什么,你用来执行第一个 ssh 连接的远程用户?
-
我认为成为用户是root,换成root而不是david,就可以了。
-
@helloV - 我也尝试在任务中添加“成为真的”,结果是一样的。
-
@Raul Hugo - 远程和本地计算机上的用户名都是“david”。如果我删除 'become_user' 它可以工作,那是因为它默认为 root (根据文档)。但是我想以“大卫”的身份运行它,而不是“根”。
-
@DavB 查看我的更新答案。
标签: ansible sudo privileges