我已经设置了一个包含sudo权限的用户david的方框.我可以进入框中并执行像apt-get install这样的sudo操作.当我尝试使用Ansible的“成为特权升级”做同样的事情时,我得到一个权限被拒绝错误.所以一个简单的剧本可能看起来像这样:
@H_502_26@解决方法
simple_playbook.yml:
我使用以下命令运行此playbook:
- ansible-playbook -i inventory simple_playbook.yml --ask-become-pass
为什么我被拒绝了?
附加信息
我正在运行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非常确切的消息.