Nul*_*ter 5 ubuntu sudo ansible
我Ansible-2.0
在 linux 机器上使用,我希望使用 ansible 在远程机器上更改 DNS,如下所示:
---
# tasks file for test
- name: Change dns
become: yes
become_user: admin
replace:
dest: /etc/resolv.conf
regexp: '192.168.1.24'
replace: '8.8.8.8'
Run Code Online (Sandbox Code Playgroud)
输出:
$ ansible-playbook -i "mn," test.yml
TASK [test : Change dns] *******************************************************
fatal: [mn]: FAILED! => {"changed": false, "failed": true, "msg": "The destination directory (/etc) is not writable by the current user."}
PLAY RECAP *********************************************************************
mn : ok=1 changed=0 unreachable=0 failed=1
Run Code Online (Sandbox Code Playgroud)
在远程机器上,管理员是 sudo 用户,在这里我不想更改sudo
远程机器上的设置,是否有任何方法使用任务(脚本)而不是使用命令行传递密码。
您应该配置admin
为remote_user
,而不是become_user
. 该become_user
选项设置您将su
执行特定任务的用户。换句话说,你的剧本应该是这样的:
---
- hosts: somehosts
remote_user: admin
roles:
....
#tasks file
---
# tasks file for test
- name: Change dns
become: yes
replace:
dest: /etc/resolv.conf
regexp: '192.168.1.24'
replace: '8.8.8.8'
Run Code Online (Sandbox Code Playgroud)
这样,管理员用户将用于建立您的 ssh 会话,但Change dns
将用于任务sudo
。
此外,如果admin
sudo 需要密码,您将必须像这样运行您的剧本:
ansible-playbook -i mn test.yml -K
Run Code Online (Sandbox Code Playgroud)
该-K
交换机会提示您输入sudo的密码admin
。