본문 바로가기
DevOps/Ansible

Ansible) 인벤토리 구성 및 통신 확인

by LILO 2022. 3. 26.
반응형

INTRO

앞 전에 글을 보면 인벤토리에 IP, 호스트네임을 기록해서 관리 노드의 목록을 관리한다고 언급을 했었습니다.

 

Ansible) Ansible 개념

INTRO Ansible을 사용하기 전에 기본적으로 이해하고 가야되는 개념들을 Ansible Docs에서는 크게 6가지로 소개합니다. Ansible concepts — Ansible Documentation These concepts are common to all uses of Ans..

lilo.tistory.com

이 글에서는 간단하게 인벤토리를 구성하고 인벤토리에 등록한 관리 노드와의 통신에 대한 이야기를 하려고합니다.

 

 

 

Inventory 구성

인벤토리는 설정하는 "/etc/ansible/hosts" 파일이 존재합니다.

앞으로 많이 사용하지 않을 파일이지만 간단하게 구성하게 통신을 확인할 수 있을 용도에 적합하여 소개 드립니다.

 

 

먼저 hosts 파일에 인벤토리를 설정합니다.

[root@control ~]# vim /etc/ansible/hosts
[WEB]
192.168.56.101
[LOG]
192.168.56.110

 

 

ad-hoc을 이용하여 단일 작업을 실행하려고 합니다.

인벤토리에 등록된 관리 노드와 통신이 되는지 확인하기 위해 ping 모듈을 사용합니다.

[root@control ~]# ansible all -m ping
192.168.56.110 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: root@192.168.56.110: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
    "unreachable": true
}
192.168.56.101 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: root@192.168.56.101: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
    "unreachable": true
}

 

에러가 발생하는 것을 볼 수 있습니다. 

에러 원인은 제어 노드의 SSH 공개키 정보가 관리 노드에 없기 때문입니다.

해결 방법으로는 공개키 교환(ssh-copy-id), 암호를 물어보게 설정(ad-hoc 옵션에 --ask-pass 추가)이 있습니다.

 

 

먼저 공개키를 교환하지 않고 --ask-pass 옵션을 줘서 실행해보고 진행해보겠습니다.

정상적으로 SUCCESS 동작을 하는 것을 확인하면 됩니다.

[root@control ~]# ansible all -m ping --ask-pass

 

 

이렇게 진행하여도 상관은 없겠지만 Ansible은 기본적으로 SSH 공개키를 교환해서 SSH Password를 입력하지 않는 것을 권장드립니다.

먼저, 제어 노드에서 Public Key(공개키)와 Private Key(비밀키)를 생성합니다.

[root@control ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): (엔터 입력)
Enter passphrase (empty for no passphrase): (엔터 입력)
Enter same passphrase again: (엔터 입력)
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:dq0HfiTHEO7cXwHTCmCDrHdmNhvo89/aNTuQlvxqlJk root@control
The key's randomart image is:
+---[RSA 3072]----+
|      . .+o  o.  |
|       o...o  o. |
|      . . o . .. |
|     . o X = .  .|
|      o S X B * .|
|       + + * E . |
|        o o = +o |
|         . oo..oo|
|          .oo+...|
+----[SHA256]-----+

 

 

관리 노드에 공개키를 전송합니다.

[root@control ~]# ssh-copy-id 192.168.56.101
[root@control ~]# ssh-copy-id 192.168.56.110

 

 

관리 노드에서 전송이 잘 되었는지 확인합니다.

authorized_keys 파일 내용에 제어 노드의 호스트 네임이 끝 부분에 있는지만 확인해주면 됩니다.

추가로 테스트 하고 싶으신 분들은 제어 노드에서 관리 노드로 ssh로 접속할 때 자동로그인이 되는지 확인하는 방법도 있습니다.

[root@WEB ~]# cat ~/.ssh/authorized_keys ssh-rsa 


[root@LOG ~]# cat ~/.ssh/authorized_keys ssh-rsa 

 

 

다시 본론으로 돌아와 ping 모듈을 이용해서 통신을 확인합니다.

통신이 잘 되면 SUCCESS 상태로 출력됩니다.

[root@control ~]# ansible all -m ping

 

 

 

일반 사용자 계정으로 Ansible 이용하기

 

공개키를 전송하기 전에 ad-hoc 명령을 이용해서 ping 모듈을 이용하여 통신 테스트를 합니다

-k 옵션을 이용해서 --become으로 마치 sudo 권한이 있는 유저처럼 행동하게 하고 공개키를 전송하기 전이니 Password를 입력하게 합니다. ( -k=--ask-become-pass)

추가로 -u 옵션을 이용하여 원격지에서 작업할 유저를 지정합니다.

[ansible@control ~]$ ansible all -m ping -k -u root

 

 

Public Key와 Private Key를 생성합니다.

[ansible@control ~]$ ssh-keygen

 

 

공개키를 전송하여 비밀번호를 입력할 필요없이 작업할 환경을 구성합니다.

[ansible@control ~]$ ssh-copy-id root@192.168.56.101
[ansible@control ~]$ ssh-copy-id root@192.168.56.110

 

 

ping 모듈을 입력하여 관리 노드와 통신을 테스트합니다.

SUCESS 상태를 확인합니다.

[ansible@control ~]$ ansible all -m ping -u root

 

반응형

'DevOps > Ansible' 카테고리의 다른 글

Ansible) 관리 노드에 SSH root 접근이 제한되어 있을 경우  (0) 2022.03.27
Ansible) Ansible 설치하기  (0) 2022.03.26
Ansible) Ansible 개념  (0) 2022.03.26
Ansible) Ansible이란?  (0) 2022.03.25