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

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

我在 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.

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

ansible-playbook -i mn test.yml -K

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

答案2

如果您有 sudo 访问权限来更改目标目录,您可以使用下面的 var

ansible_user:用户名

ansible_ssh_pass:密码

变成:是

成为方法: sudo

ansible_become_password:sudo 密码

相关内容