INTRO
앞 전에 글을 보면 인벤토리에 IP, 호스트네임을 기록해서 관리 노드의 목록을 관리한다고 언급을 했었습니다.
이 글에서는 간단하게 인벤토리를 구성하고 인벤토리에 등록한 관리 노드와의 통신에 대한 이야기를 하려고합니다.
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 |