当前用户在 ansible 上无法写入目标目录 (/etc)

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远程机器上的设置,是否有任何方法使用任务(脚本)而不是使用命令行传递密码。

13d*_*tar 7

您应该配置adminremote_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

此外,如果adminsudo 需要密码,您将必须像这样运行您的剧本:

ansible-playbook -i mn test.yml -K
Run Code Online (Sandbox Code Playgroud)

-K交换机会提示您输入sudo的密码admin