Ansible 在远程主机上发出命令时报告“权限被拒绝”

How*_*Lee 5 ansible

Ansible 2.1
Ansible 主机:Ubuntu 16.04
远程主机:CentOS 6.5

我对 Ansible 很陌生。我有一个简单的ansible项目:

??? hosts
??? roles
?   ??? setup
?       ??? defaults
?       ?   ??? main.yml
?       ??? tasks
?       ?   ??? main.yml
?       ??? templates
?           ??? automation-agent.config.j2
??? site.yml
Run Code Online (Sandbox Code Playgroud)

我用来运行剧本的命令:

ansible-playbook -i hosts site.yml --user admin --ask-pass

在远程主机上,我设置了admin具有 root 权限的用户:

root    ALL=(ALL)       ALL
admin   ALL=(ALL)       ALL
Run Code Online (Sandbox Code Playgroud)

但是,其中一项剧本任务遇到了问题:

- name: Back up Automation Agent config file if exists
  command: mv /etc/mongodb-mms/automation-agent.config /etc/mongodb-mms/automation-agent.config.bak
Run Code Online (Sandbox Code Playgroud)

Ansible 报告:

TASK [setup : Back up Automation Agent config file if exists] ******************
fatal: [192.168.241.135]: FAILED! => {"changed": true, "cmd": ["mv", "/etc/mongodb-mms/automation-agent.config", "/etc/mongodb-mms/automation-agent.config.bak"], "delta": "0:00:00.002588", "end": "2016-06-01 22:57:55.577158", "failed": true, "rc": 1, "start": "2016-06-01 22:57:55.574570", "stderr": "mv: cannot move `/etc/mongodb-mms/automation-agent.config' to `/etc/mongodb-mms/automation-agent.config.bak': Permission denied", "stdout": "", "stdout_lines": [], "warnings": []}
Run Code Online (Sandbox Code Playgroud)

注意到权限设置/etc/mongodb-mms/automation-agent.config0600

-rw-------. 1 mongod mongod 313 Jun 1 04:48 automation-agent.config

显然,需要sudo特权才能更改此文件。我试过 Ansible 的--becomeand --become-user,但没有成功。

ansible-playbook -i hosts site.yml --user admin --ask-pass --become --become-user admin

我应该在 Ansible 中做什么来获取sudo和更改该文件?

Del*_*tik 5

你正在使用--become-user admin,所以你本质上是在做sudo -u admin,但你打算成为rootsudo -u root)。

不要指定--become-user admin 使用--become-user root,Ansible 默认情况下会尝试成为root.

如果您需要指定成为的密码root,请使用该--ask-become-pass标志。

sudo如果您不希望在使用 时提示输入密码sudo,则您sudoers的用户条目admin应改为如下所示:

admin   ALL=(ALL)       NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)