Ansible

Ansible 서버 Known_hosts에 node 등록 자동화

Joon0464 2021. 7. 21. 13:27

[심화] 앤서블(Ansible)을 깊이 있게 활용하기 대시보드 - 인프런 | 강의 (inflearn.com)

 

[심화] 앤서블(Ansible)을 깊이 있게 활용하기 - 인프런 | 강의

앤서블을 시간을 적게 들이면서, 좀 더 구조적으로 그리고 빠르게 동작하도록 만들어 봅시다. 그리고 부가적으로 보안적인 부분도 함께 알아보겠습니다., Ansible 심화 강좌 이전에 출시된 '[기초]

www.inflearn.com

1. known_hosts 수동 설정 방법

vagrant로 서버와 노드를 프로비저닝하고 ping 모듈을 통해 통신 테스트를하면 아래와 같이 Failed가 발생한다.

ssh키 교환이 아직 이루어지지 않았기 때문에 발생한다.

위와 같이 nodes 에게 ping 모듈 테스트를 진행하면 실패했다고 출력된다.

이를 수동으로 해결하기 위해서는 ans nodes -m ping을 입력하면 나오는 질문들에 yes를 입력하여 키 교환을 수동으로 해주면 해결이 가능하다.

키 교환이 완료되고 다시 ping 모듈을 테스트하면 정상적으로 SUCCESS가 출력되는 것을 볼 수 있다.

2. known_hosts 설정 자동화

2.1 Known_hosts 정의

이미 알고있는 호스트로, 확인하지 않아도 되는 신뢰 가능한 호스트를 의미한다.

  1. Ansible Server가 Ansible node에 접속을 시도한다.
  2. 접속하려는 대상이 믿을 만 한 대상인지 사용자에게 확인 요청
  3. 사용자의 확인이 끝난 호스트를 접속 대상의 Key를 저장한다.(~/.ssh/known_hosts)

/usr/bin/ssh-keyscan -t ecdsa 192.168.1.x : known_hosts에 접속 대상의 ssh키를 저장하는 명령어이다.

위 명령어를 사용하여 ssh key 교환을 자동화 하도록 하겠다.

 

2.2 Auto_known_host.yml 파일 생성

C:\Hashicorp 경로에 아래의 내용을 작성하여 yml 파일을 생성한다.

# Auto_known_host.yml
---
- hosts: nodes
  connection: local
  serial: 1
  gather_facts: no

  tasks:
  - command: /usr/bin/ssh-keyscan -t ecdsa {{ ansible_host }}
    register: keyscan

  - lineinfile:
      name=~/.ssh/known_hosts
      create=yes
      line={{ item }}
    with_items:
      - "{{ keyscan.stdout_lines }}"

serial을 1로 설정하면 현재 노드들에 대한 Task를 하나씩 실행하게 설정한다. 이를 설정하지 않으면 known_hosts에 들어가야하는 ssh key값이 일부 노드에는 정상적으로 들어가지 않는 현상이 발생한다.

command 모듈로 ssh key를 생성하는 명령어를 실행한다. 여기서 {{ ansible_host }}는 /etc/ansible/hosts에 등록된 모든 호스트를 의미한다.

register로 keyscan에 ssh key값을 저장한다.

lineinfile 모듈을 사용하여 /.ssh/known_hosts 파일에 내용을 추가한다.

with_items에서 저장해둔 ssh 키 값을 불러와 /.ssh/known_hosts에 ssh 키를 추가한다.

 

2.3 Vagrantfile 수정

	 cfg.vm.provision "file", source: "Auto_known_host.yml", destination: "Auto_known_host.yml"
	 cfg.vm.provision "shell", inline: "ansible-playbook Auto_known_host.yml", privileged: false

위 내용을 vagrantfile의 Ansible-Server 구성 코드에 아래와 같이 작성한다.

2.4 구성 및 테스트

C:\HashiCorp>vagrant up
C:\HashiCorp>vagrant ssh ansible-server
# ans nodes -m ping -k

vagrant up 또는 vagrant provision ansible-server를 통해 변경사항을 프로비저닝하고 vagrant ssh로 ansible-server에 접속한다.

ansible nodes -m ping -k 를 입력하여 테스트를 진행한다.

다음과 같이 8개의 nodes에서 모두 SUCCESS가 출력되면 성공이다.

#vi ~/.ssh/known_hosts

등록된 호스트 정보를 확인해보기 위해 known_hosts를 열어본다.

서버를 프로비저닝 하자마자 바로 ans로 모듈을 테스트할 수 있는 이유는 known_hosts 파일에 호스트 정보가 등록되었기 때문이다.