앤서블 환경 설정 파일 이론 및 앤서블 접근을 위한 SSH 인증구성

728x90
반응형

출처 : 앤서블로 시작하는 인프라 자동화, https://www.youtube.com/watch?v=5PihG-YGRto

 

 

  • 이전 시간에는 인벤토리를 사용해 대상 호스트를 정의했다. 이번 시간에는 대상 호스트에 수행될 작업들을 정의하기 위한 플레이북을 작성한다.
  • ansible.cfg 환경 설정 파일이 존재하는 디렉토리가 앤서블 프로젝트 디렉토리가 될 수 있다.

 

플레이북 환경 설정

  • 플레이북을 작성하고 실행하려면 여러 가지 설정을 해주어야 한다.
    • 어떤 호스트에서 플레이북을 실행할 것인지
    • 플레이북을 루트 권한으로 실행할 것인지
    • 대상 호스트에 접근할 때는 SSH 키를 이용할 것인지 패스워드를 이용할 것인지

 

앤서블 환경 설정 파일

  • 앤서블 프로젝트 디렉토리에 ansible.cfg 환경 설정 파일을 생성하면 다양한 앤서블 설정을 적용할 수 있다.
  • 앤서블 환경 설정 파일에는 각 섹션에 key-value 쌍으로 정의된 설정이 포함되며, 여러 개의 섹션으로 구성된다.
  • 섹션 제목은 [ ]로 묶여 있으며, 기본적인 실행을 위해 2개의 섹션([defaults]와 [privilege_escalation])으로 구성한다.
[defaults]
inventory = ./inventory
remote_user = user
ask_pass = false

[privilige_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

 

 

[defaults] 섹션

  • 앤서블 작업을 위한 기본값을 설정한다.
  • 매개 변수별 설정값의 의미
    • inventory : 인벤토리 파일의 경로를 지정함
    • remote_user : 앤서블이 관리 호스트에 연결할 때 사용하는 사용자 이름을 지정함. 만약 사용자 이름을 지정하지 않으면 현재 사용자 이름으로 지정된다.
    • ask_pass : SSH 암호를 묻는 메시지 표시 여부를 지정함. SSH 공개 키 인증을 사용하는 경우 기본값은 false 이다.

 

[privilege_escalation] 섹션

  • 보안과 감사로 인해 앤서블을 원격 호스트에 권한이 없는 사용자로 먼저 연결한 후 관리 액세스 권한을 escalation(단계적으로 확장)하여 루트 사용자로 가져올 때 사용한다.
  • 매개 변수별 설정값의 의미
    • become : 기본적으로 권한 에스컬레이션을 활성화할 때 사용한다. 연결 후 관리 호스트에서 자동으로 사용자를 전환할지 여부를 지정한다. 일반적으로 root로 전환되며, 플레이북에서도 지정할 수 있다.
    • become_method : 권한을 에스컬레이션하는 사용자 전환 방식을 의미한다. 일반적으로 기본값은 sudo를 사용하며, su는 옵션으로 설정할 수 있다.
    • become_user : 관리 호스트에서 전환할 사용자를 지정한다. 일반적으로 기본값은 root이다.
    • become_ask_pass : become_method 매개 변수에 대한 암호를 묻는 메시지 표시 여부를 지정한다. 기본값은 false이다. 권한을 에스컬레이션하기 위해 사용자가 암호를 입력해야 하는 경우, 구성 파일에 become_ask_pass = true 매개 변수를 설정하면 된다.

 

  • 앤서블은 리눅스에서 기본적으로 SSH 프로토콜을 사용하여 관리 호스트에 연결한다.
  • 앤서블에서 관리 호스트에 연결하는 방법을 제어하는 가장 중요한 매개 변수는 [defaults] 섹션에 설정되어 있다.
  • 별도로 설정되어 있지 않으면 앤서블은 실행 시 로컬 사용자와 같은 사용자 이름을 사용하여 관리 호스트에 연결한다.
  • 다른 사용자를 지정하려면 remote_user 매개 변수를 사용하여 해당 사용자 이름으로 설정할 수 있다.

 

앤서블 접근을 위한 SSH 인증 구성

  • 앤서블은 로컬 사용자에게 개인 SSH 키가 있거나 관리 호스트에서 원격 사용자임을 인증 가능한 키가 구성된 경우 자동으로 로그인된다.
  • SSH 키 기반의 인증을 구성할 때는 ssh-keygen 명령어를 이용하여 다음과 같이 생성할 수 있다.
  • ssh-copy-id 명령어를 이용하여 SSH 공개 키를 해당 호스트로 복사할 수 있다.

 

ssh tnode2-ubuntu@192.168.100.6 -p 22

 

실습의 편의를 위해 Ubuntu 노드에 root 계정으로의 SSH 접속을 허용하도록 옵션을 활성화하고, root 계정의 비밀번호도 변경하도록 한다.

먼저 tnode2-ubuntu 서버에 접속한다.

 

sudo su

 

sudo su 명령어를 입력해 root 권한으로 명령어를 실행할 수 있도록 만든다.

 

vi /etc/ssh/sshd_config

33번째 줄 PermitRootLogin yes

 

/etc/ssh/sshd_config 파일에서 PermitRootLogin 옵션을 활성화한다.

 

systemctl restart ssh
systemctl status ssh

 

옵션을 활성화한 후 ssh 서비스를 재시작한다. 상태를 확인했을 때 active (running)이 되면 된다.

 

passwd

 

root 비밀번호를 변경한다.

 

tnode3-ubuntu 서버도 동일하게 설정해준다.

 

ssh root@192.168.100.6 -p 22
ssh root@192.168.100.7 -p 22

 

tnode2-ubuntu와 tnode3-ubuntu의 root 계정으로 접속이 가능한지 확인한다. 만약 접속이 안된다면 위 과정을 다시 한번 진행해보자.

 

ssh-keygen
[엔터] 3번

 

ansible-server에서 ssh-keygen 명령어를 이용하여 SSH 키를 생성한다.

 

for i in {5..7}; do ssh-copy-id root@192.168.100.$i; done

 

ssh-copy-id 명령어를 이용해 현재 사용자의 SSH 키를 192.168.100.5~7의 IP 주소를 가진 관리 노드의 root 계정에 복사한다.

 

cd my-ansible
vi ansible.cfg

 

앤서블 프로젝트 디렉토리(my-ansible)에서 앤서블 환경 설정 파일(ansible.cfg)의 내용을 수정한다.

 

[defaults]
inventory = ./inventory
remote_user = root
ask_pass = false

[privilege_escalation]
become = true
become_method = sudo
become_ask_pass = false

 

defaults 섹션에서는 현재 디렉토리의 ./inventory를 인벤토리 파일로 사용하고, 앤서블이 관리 호스트에 접속 시 root 계정을 사용한다. SSH 암호는 묻지 않도록 설정했다.

 

privilege_escalation 섹션에서는 root 권한으로 실행을 활성화하고, root 권한을 획득하는 데 sudo를 사용하도록 설정했다. 암호는 마찬가지로 묻지 않도록 설정했다.

 

ansible -m ping web

 

ansible 명령어를 이용해 ping 테스트를 진행한다.

ping 모듈을 이용하여 web 그룹의 호스트로 ping을 수행하면 정상적으로 통신이 이루어질 시 SUCCESS라는 메시지가 출력된다.

 

ansible -m ping --ask-pass web

 

--ask-pass 옵션을 추가하여 ping 테스트를 진행한다. 

 

 

 

728x90
반응형