ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Ansible] 신규 Client 서비스 활성화 (WINDOW/LINUX)
    오픈소스 2022. 9. 27. 17:06

     개요

     필자가 관리하는 인프라 환경은 WINDOW가 70% 이상으로 대다수를 차지하고 있다. 그래서 지금까지는 관련된 Playbook 위주로 개발을 해왔었으나, 점차 UNIX 서버의 비중이 줄어들고 LINUX 서버의 비중이 늘어나는 만큼 그에 대한 Playbook 개발이 필요하게 되었다. 우선은 동일하게 패치 자동화를 우선으로 진행할 계획이며, 신규 장비를 연동하기 위한 설정값들을 정리한 내역이 없어서 이를 먼저 정리하고자 한다. 단, 사용하는 Inventory의 형태나 버전에 따라서 일부 문법 등이 상이할 수 있으니 이 점 참고하길 바란다.

     

     


     

     

     Inventory 형태

     지금까지 사용했던 형태와 다른 부분은 없으며, OS 종류에 따라서 추가되는 항목이 있다. 아래 예시에서 항목에 따라 자세히 살펴볼텐데 굵게 표시된 내역들은 고정된 값이 아니라 장비에 따라 상이한 부분이며, 실제 동작을 확인한 버전들에 대해서는 함께 기재를 해두었는데 다른 버전일지라도 사용하는데 큰 문제는 없을 것으로 보인다.

     

    [WINDOW = 2012/2016/2019]

    Name ansible_port=5985 ansible_host=x.x.x.x ansible_user=user ansible_password=abc ansible_connection=winrm

    Name  장비를 구분하기 위한 이름 값으로, Playbook 내부에서 장비 구분자로 사용
    ansible_port=5985  WinRM 서비스의 기본 포트로 HTTP 기반으로 동작한다.
     (필요 시, HTTPS 통신으로 변경이 가능하며 포트는 5986으로 변경된다.)
    ansible_host  장비의 IP
    ansible_user  장비에 접근하기 위한 계정의 ID (권한 부족 등의 이슈 방지를 위하여 Admin 권한 권고)
    ansible_password  ansible_user 에서 사용한 계정에 대한 패스워드 정보
    ansible_connection=winrm  장비에 접속하기 위한 연결 정보를 선언하는 값으로, WINDOW는 공통적으로 winrm 사용

     

    [LINUX = RHEL7,8 / CentOS7,8]

    Name ansible_port=22 ansible_host=x.x.x.x ansible_user=user ansible_password=abc ansible_connection=winrm ansible_become_pass=rootpw

    Name  장비를 구분하기 위한 이름 값으로, Playbook 내부에서 장비 구분자로 사용
    ansible_port=22  기본적으로 SSH 기반으로 통신하기에, 동일하게  22번을 사용
     (마찬가지로 SSH 번호가 변경되면 같은 값으로 변경 필요)
    ansible_host  장비의 IP
    ansible_user  장비에 접근하기 위한 계정의 ID (일반적으로 root 접근이 안되므로 1차 접근용 계정 ID)
    ansible_password  ansible_user 에서 사용한 계정에 대한 패스워드 정보
    ansible_connection=ssh  장비에 접속하기 위한 연결 정보를 선언하는 값으로, LINUX는 공통적으로 ssh 사용
    ansible_become_pass  1차 접근 후, 관리자 권한이 필요할 경우 권한 상승을 위한 root 계정의 패스워드 정보

     

    각 장비마다 한줄 씩 작성하는 식으로 사용하고 있으며, 계정 정보가 포함되기에 작업 후에는 반드시 삭제해야 한다. 아래는 필자가 실제로 사용하는 예시 Inventory 파일이다.

    그림-1. Inventory 사용 예시

     

     Client 설정 (WINDOW)

     순정 이미지는 기본적으로 WinRM 서비스가 비활성화되어 있기 때문에, 해당 서비스를 활성화시키고 하위 옵션 2가지의 상태 값을 바꿔주기만 하면 된다. 일괄적으로 명령어를 수행시킬 수 있는 환경이 있다면 명령어 3줄을 통해서 한 번에 활성화시킬 수 있으나, 2012 하위 버전의 경우에는 powershell 버전 문제로 인하여 버전 업그레이드 이후에 정상적으로 사용할 수 있다.

    winrm quickconfig -force

    winrm set winrm/config/service @{AllowUnencrypted="true"}

    winrm set winrm/config/service/Auth @{Basic="true"}

    아주 간혹, 오타없이 입력하였음에도 불구하고 Invalid Error가 발생하면서 오류를 출력하는 경우가 있다. 정확한 원인은 파악하지 못했지만 각 Config @ 앞에 작은 따옴표(')를 입력해줌으로써 해결할 수 있다. 달라진 부분은 붉게 표시해뒀으니 잘 구분해야 하며 아래 방법으로 오히려 오류가 발생할 수 있으니 안되면 2개 구문을 모두 수행해보길 바란다.

    winrm quickconfig -force

    winrm set winrm/config/service '@{AllowUnencrypted="true"}'

    winrm set winrm/config/service/Auth '@{Basic="true"}'

     

     Client 설정 (LINUX)

     LINUX는 앞선 경우와는 다르게 Client/Master 모두 설정이 필요하다. 먼저 Client에서 수행해주도록 하자.

    # vi /etc/sudoers
    (구문 추가) Defaults    rootpw  

    Ansible에서는 Playbook - becomd 이라는 구문을 통하여 필요시 권한 상승을 진행한다. 이때 사용하는 sudo를 사용하게 되어있는데 리눅스는 기본적으로 일반 계정에서 이를 사용할 때 root의 패스워드가 아닌 현재 게정의 패스워드를 요구한다. 즉, 일반 계정에서 root의 권한이 필요함에도 불구하고 일반 계정으로 이를 확보할 수 있는 아이러니가 발생한다. 적용한 이후에는 즉시 적용되는 설정이며 이후에는 sudo를 수행할 경우 root 패스워드를 입력해야만 정상적으로 사용할 수 있다. 

    다음은 Master에서 수행해주어야 하는 설정이다.

    # vi /etc/ansible/ansible.cfg
    (구문 추가) host_key_checking = False

    SSH를 통한 Ansible Connection을 시도할 때, 양 서버간의 Key를 확인하지 않는다는 옵션이며 이를 비활성화해주어야만 패스워드를 통하여 정상 접속이 가능하다. 만약, 패스워드가 아닌 키 교환 방식을 통하여 서버를 운영한다면 다른 설정이 필요할 것으로 생각된다. 모든 설정을 완료한 이후에는 Master → Client SSH 접속을 한번 해줌으로써 최초 1회 키 교환이 이루어져야 하며, 그 이후에는 추가 접속 없이 정상적으로 Ansible Playbook이 정상적으로 동작하게 된다.

     

     


     

     

     마무리

     Ansible이 좋은 건 확실한데 Client 버전/설정이 변경되면 이로 인하여 기존에 사용하던 내역들이 안되는 경우가 있을 수 있다는 게 가장 안타까운 부분이다. 물론 그렇다 할지라도 사용했을 때의 효과에 비하면 미비한 부분이기에 당분간은 계속해서 사용할 것이고, 다음에는 LINUX 패치 자동화에 대한 내용을 다룰 계획이다.

    궁금하신 내용은 댓글로 남겨주시고, 많은 블로그 방문은 저에게 큰 힘이 됩니다. ・ᴥ・ 

     

    댓글

Designed by Tistory.