이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Ansible

Ansible playbook에서 sudo 사용하기

이쿠우우 2022. 4. 7. 20:21
반응형

 

 

 
 
 

Ansible playbook에서 sudo 사용하기

 
 

문제 상황

Ansible로 host에 접속해야하는데
해당 host는 ssh접속 시 root계정은 막혀있음.
일반 계정으로 ssh 접속 가능.
하지만 Ansible로 확인해야하는 파일은 
root 권한이 있어야 확인 가능함.
이를 해결하기 위해
Ansible 접속 시 일반 계정으로 접속해서
sudo 명령으로 진행해야함.
 
 

환경

[host] 
SSH 접속 : root 차단, centos 계정으로 접속 가능
확인해야하는 파일 경로 : /root/rootTempFile.txt
 
 
 

문제가 되는 ansible playbook

 
[예제 playbook]
---
- hosts: all
  tasks:
  - name: execute the script
    command: cat /root/rootTempFile.txt
    register: temp
  - name: print temp value
    debug: msg="{{temp.stdout_lines}}"

 

 
[결과]
centos 계정은 root권한이 없어서 
/root/rootTempFile.txt 파일 내용을 확인할 수 없음.

 

 

 

해결책 Ansible become 옵션 사용

 
 
Ansible에서 sudo는 2.9 버전 부터 제거됨.
그래서 sudo 대신 become을 사용해야함.
 
 

Ansible become

 
[ansible_become]
become은 특정 사용자로 전환할것인지 설정하는 옵션임.
become은 true, false, yes, no 설정 가능. 
yes 설정 시 하위의 become_user, become_method 등 옵션이 적용됨.
 
[ansible_become_user]
사용자 지정 가능.
해당 옵션을 설정하지 않는 경우 root가 default임. 
 
 
[ansible_become_method]
sudo , su , pbrun , pfexec , doas , dzdo , ksu 중 하나로 선택할 수 있음.
해당 옵션을 설정하지 않는 경우 sudo가 default임. 
 
[become_flags]
실행할 명령어 지정. 
 
[become_pass]
계정을 변경하는 경우 password가 필요함.
해당 옵션에 password를 넣어주면됨.
 
 

Ansible become 예제

 
[예제 playbook]
---
- hosts: all
  tasks:
  - name: execute the script
    vars:
      ansible_become: yes
      ansible_become_method: sudo
      ansible_become_pass: 'qwer1234'
    command: cat /root/rootTempFile.txt
    register: temp
  - name: print temp value
    debug: msg="{{temp.stdout_lines}}"
 
[결과]
centos 계정으로 접속해서 
root 권한이 필요한 파일 내용을 확인할 수 있음.

 

 
참고

 

반응형