Python & Automation

[Ansible] Ansible의 환경설정 및 ad-hoc 명령

모모토 2022. 2. 18. 00:25
반응형

https://griffithh.tistory.com/107?category=985975 

 

[Ansible] Control node & Managed node 설치 및 ssh 접속

Ansible 실습환경 구성 virtualBox 를 이용한 가상 환경 Virtual Machine CPU : dual core memory : 2GB 제어 노드 구성 필수요소 ★ sshd 활성화 python 3.x 버전 interpreter 설치 pip 패키지 설치 Control node..

griffithh.tistory.com

 

지난 포스팅에서는 컨트롤 노드에서 매니지드 노드로 ssh 접속까지만 진행하고 말았다. 오늘은 컨트롤 노드에서 매니지드 노드로 adhoc명령과 playbook을 이용하여 여러 가지 명령도 내려보고 설정도 해볼 것이다.

 

우선 환경설정과 인벤토리의 개념에 대해서 간단하게 알아보면

인벤토리란 저번 포스팅에서 정리했듯이 매니지드 노드의 목록이다. 호스트(hosts) 파일로도 부르며 이 안에는 매니지드 노드에 대한 IP주소와 호스트 정보 , 변수 등등을 저장할 수 있다.

 

우리가 playbook이든 adhoc이든 명령을 보내려면 매니지드 노드의 ip를 알아야 할 것 아닌가? 바로 인벤토리에 매니지드 노드의 ip를 적어주어야 이 ip를 참조하여 명령을 보내고 환경설정을 할 수 있는 것이다. 

 

  • ansible의 환경설정 -> /etc/ansible
    1. /etc/ansible/ansible.cfg : Ansible의 환경설정 및 정보 파일
    2. /etc/ansible/hosts : default inventory 파일

자세한 설명과 설정은 ad-hoc과 playbook을 설명하면서 진행해보자

 

ad-hoc command

 

ad-hoc이란 무엇이냐 , playbook의 작성 없이 바로 ansible의 모듈을 사용하는 것이다.

ansible <host( target ) ip addr> -m ping
#ip addr에 대한 ping 명령 수행

ansible <host( target ) ip addr> -a ‘ls -la’
#ip addr에 대한 ‘ls -la’ 명령 수행

 

ad-hoc 명령어 사용 시 자주 쓰는 인자들

  •  -a MODULE_ARGS : 모듈 인수, 형식( k=v )
  • -i INVENTORY : inventory 파일 지정
  • -m MODULE_NAME ( default=command ) : 실행 동작

 

실제 가상 머신에서 위처럼 ad-hoc명령어를 실행시켜보자

[WARNING]: Could not match supplied host pattern, ignoring: 192.168.0.107

ad-hoc 명령어를 실행하였더니 위와 같은 경고 메시지가 떴다.

 

이유는 간단하다.

 

inventory에 호스트 주소가 없기 때문이다. inventory에 주소를 적어주자

 

default inventory인 /etc/ansible/hosts 에 매니지드 노드의 ip 주소를 적어주었다. 이제 다시 명령어를 사용해보자

 

이제 명령어가 주소를 알고 찾아갔지만 ssh로 접속 시 접근이 제한되었다. 위와 같은 상황이 벌어지는 이유는 바로 ssh의 공개키가 매니지드 노드에 존재하지 않기 때문에 접근에 제한이 생기는 것이다.

 

여기서부턴 원활한 진행을 위하여 managed node와 control node 양쪽에 ansible이라는 계정을 생성해주자

 

control node에서 작업( Ansible 설치 서버 ) - 정상

  • sudo adduser ansible : ansible 사용자 생성
  • sudo vi /etc/sudoers 파일에 ansible 사용자 sudo 권한 설정 추가
    • ansible ALL=(ALL:ALL) NOPASSWD:ALL
    • /etc/sudoers 파일이 읽기 전용이므로 vi로 편집 시 저장은 ‘w!’를 사용한다.
  • su - ansible : ansible 사용자 전환
  • ssh-keygen : ansible 사용자 ssh key 생성
  • ssh-copy-id host@ip : ssh key( 공개키 )를 managed node( host, target )에 복사

managed node에서 작업( Ansible 설치 x ) 

  • sudo adduser ansible : ansible 사용자 생성

 

이제 다시 ad-hoc 명령어를 실행해주면 다음과 같은 상태가 된다.

위와 같이 sussess로 명령어가 성공한다면 , 이제 ad-hoc과 playbook으로 명령과 환경설정을 할 수 있는 상태가 완료된 것이다.

 

다음 포스팅에선 playbook의 개념과 사용에 대해서 알아볼 수 있으면 알아보자(playbook 개념만 다룰 듯싶다.. 양이 많아서)

 

[참고] 위에서 ansible 명령어의 타깃인 testserver는 다음과 같이 설정해준 것이다.