본문 바로가기

Engineering/Ansible

[Ansible] 3. Ansible.cfg, Generating SSH key

 

Ansible.cfg란?

ansible 엔진이 ansible을 실행할 때 참조하는 설정 구성파일이다. 인벤토리 파일의 기본 위치, 관리 노드에 대한 ssh 접속 및 실행 권한 설정 등등 많은 설정들을 포함하고 있다. 이 파일은 여러 경로에 위치할 수 있으며, ansible 엔진이 우선순위에따른 참조를 하여 ansible을 실행하게 된다.

 

ansible.cfg의 우선순위

1. ansible 명령어를 실행하는 현재 디렉토리에 위치한 ansible.cfg: ./ansible.cfg

2. 사용자의 홈 디렉토리의 ansible.cfg: $HOME/.ansible.cfg

3. /etc/ansible/ansible.cfg (default)

 

ansible.cfg 파일을 생성하고 싶으면 아래 명령어를 입력해보자. default 옵션의 ansible.cfg파일이 생성된다.

$ ansible-config init --disable > ansible.cfg

정확한 버전명은 기억이 안나지만, 이전 버전으로 ansible을 설치했을때는 /etc/ansible 밑에 기본 파일이 있었는데, 현재 설치한 버전은, 기본 파일이 존재하지 않았다.

 

 

'config file' 환경변수 예시

#기본 config file 경로 확인
[root@Ansible-Controller inventory]# ansible --version
ansible [core 2.16.3]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.12/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.12.3 (main, Jul  2 2024, 20:57:30) [GCC 8.5.0 20210514 (Red Hat 8.5.0-22)] (/usr/bin/python3.12)
  jinja version = 3.1.2
  libyaml = True

#현재 디렉토리 위치에 ansible.cfg 생성
[root@Ansible-Controller inventory]# ansible-config init --disable > ansible.cfg

#config file 환경변수 확인
[root@Ansible-Controller inventory]# ansible --version
ansible [core 2.16.3]
  config file = /home/ansible/inventory/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.12/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.12.3 (main, Jul  2 2024, 20:57:30) [GCC 8.5.0 20210514 (Red Hat 8.5.0-22)] (/usr/bin/python3.12)
  jinja version = 3.1.2
  libyaml = True

 

ansible.cfg 파일 구성

ansible.cfg 파일은 두 개의 section으로 구성되어 있다. 

#ansible.cfg 파일 구성 예시

[defaults]
inventory = ./inventory
remote_user = user
ask_pass = False

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

 

 

[defaults]
inventory 인벤토리 파일의 경로를 지정함
remote_user 앤서블이 관리 호스트에 연결할 때 사용하는 사용자 이름을 지정함. 기본값은 현재 사용자 이름
ask_pass 앤서블이 제어노드에 접근할 때 SSH 암호를 질의 여부를 지정함.

 

[privilege_escalation]
become 관리 호스트에서 자동으로 권한 사용자를 전환할지 여부를 지정함. 기본적으로 root권한으로 전환됨
become_method 권한 사용자를 전환하는 방법을 지정함. default로 sudo가 사용됨
become_user 권한 사용자 계정을 지정함
become_ask_pass become_method의 암호 질의 여부를 지정함.

 

이 외에도 많은 설정들을 커스텀할 수 있다. ansible-config list 명령어를 이용하면 ansible.cfg의 man page가 표출된다.

 


SSH Key 생성

 

관리 호스트가 제어노드에게 앤서블을 이용하여 접근하려면 원격지에 인증된 ssh key가 존재해야 한다.

ssh-keygen 명령어를 이용하여 관리 호스트의 키를 생성하고, ssh-id-copy 명령어를 이용하여 해당 키를 제어노드로 복사하는 과정이 필요하다.

 

1. ssh 키 생성

관리 호스트에서 ssh-keygen 명령어를 통해 ssh 인증 키를 생성한다.

[root@Ansible-Controller .ssh]# 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:LSL6q+DpvVGHSnsSs5Dy/teKn0jt/F3c65lsLlkti8c root@Ansible-Controller
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|                 |
|  .   .  .       |
|.o +.o..S .    . |
|..o.Bo.. . . .o .|
|. o*....    o=.o |
|.ooo+=.... .+.E+ |
|.+o=B+*o. .  *B  |
+----[SHA256]-----+

 

2. 생성된 키를 제어노드로 복사

ssh-copy-id 명령어를 통해 제어노드로 키를 복사한다.

[root@Ansible-Controller .ssh]# ssh-copy-id node1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'node1 (172.16.22.131)' can't be established.
ECDSA key fingerprint is SHA256:jZxEBqE5kwMHbKBTTIgEUckj6h972xzVrZ52TSsshNQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node1's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'node1'"
and check to make sure that only the key(s) you wanted were added.

 


간단한 플레이북을 만들어서 지금까지 진행한 환경설정이 잘 적용되었는지 확인해보자.

 

'ping.yml' 파일 생성

---
- name: ansible ping
  hosts: all 
  tasks:
  - name: node ping
    ping:

 

 

 

#실행결과

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

[Ansible] 6. Ansible Vault  (0) 2024.08.29
[Ansible] 5. 변수  (1) 2024.08.28
[Ansible] 4. Playbook 살펴보기  (0) 2024.08.28
[Ansible] 2. Ansible Inventory File  (0) 2024.08.21
[Ansible] 1. Ansible 시작하기  (0) 2024.08.20