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대신 이 옵션을 구성하여 특정 작업을 수행할 사용자를 설정 remote_user해야 합니다 . 즉, 스크립트는 다음과 같아야 합니다.become_userbecome_usersu

---
- 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

스위치는 -Ksudo 비밀번호를 묻는 메시지를 표시합니다 admin.

답변2

대상 디렉토리를 변경하기 위한 sudo 액세스 권한이 있는 경우 아래 var를 사용할 수 있습니다.

ansible_user: 사용자 이름

ansible_ssh_pass: 비밀번호

되기: 예

메소드가 됨: sudo

ansible_become_password: sudo 비밀번호

관련 정보