![ansible 上当前用户无法写入目标目录 (/etc)](https://linux22.com/image/106481/ansible%20%E4%B8%8A%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7%E6%97%A0%E6%B3%95%E5%86%99%E5%85%A5%E7%9B%AE%E6%A0%87%E7%9B%AE%E5%BD%95%20(%2Fetc).png)
我在 Linux 机器上使用Ansible-2.0
,我希望使用 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'
输出:
$ 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
在远程计算机上,管理员是 sudo 用户,在这里我不想更改sudo
远程计算机上的设置,是否有任何方法可以使用任务(脚本)而不是使用命令行传递密码。
答案1
您应该配置admin
为 a 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'
这样,将使用 admin 用户来建立您的 ssh 会话,但对于该Change dns
任务将使用sudo
.
另外,如果admin
sudo 需要密码,您将必须像这样运行您的剧本:
ansible-playbook -i mn test.yml -K
交换机-K
将提示您输入 sudo 密码admin
。
答案2
如果您有 sudo 访问权限来更改目标目录,您可以使用下面的 var
ansible_user:用户名
ansible_ssh_pass:密码
变成:是
成为方法: sudo
ansible_become_password:sudo 密码