Ubuntu

目前使用者在 ansible 上無法寫入目標目錄(/etc)

  • January 27, 2020

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'

輸出:

$ 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遠端機器上的設置,是否有任何方法可以使用任務(腳本)傳遞密碼,而不是使用命令行。

您應該配置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'

這樣,管理員使用者將用於建立您的 ssh 會話,但對於Change dns任務將使用sudo.

此外,如果admin需要 sudo 的密碼,您將必須像這樣執行您的劇本:

ansible-playbook -i mn test.yml -K

開關將-K提示您輸入 sudo 密碼admin

引用自:https://unix.stackexchange.com/questions/348043