![ansible의 현재 사용자는 대상 디렉터리(/etc)에 쓸 수 없습니다.](https://linux55.com/image/106481/ansible%EC%9D%98%20%ED%98%84%EC%9E%AC%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%8A%94%20%EB%8C%80%EC%83%81%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC(%2Fetc)%EC%97%90%20%EC%93%B8%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..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
대신 이 옵션을 구성하여 특정 작업을 수행할 사용자를 설정 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 비밀번호