이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Ansible

Ansible Play boock "Are you sure you want to continue connecting (yes/no)" 항목 Pass 하는 법

이쿠우우 2022. 1. 27. 15:57
반응형

 

 

 

Ansible Play boock "Are you sure you want to continue connecting (yes/no)" 항목 Pass 하는 법

 
 

문제 상황

Ansible로 여러 host를 자동화로 관리해야하는데
아래와 같은 상황이 발생해서 key 입력을 해줘야함.
key입력 없이 한번에 자동으로 되야하는데 매우 곤란한 상황이 발생함.

 

 
 

원인

Ansible Server에서 manager node(원격 host)에 최초 ssh 접속 시도를 하면 
사용자에게 해당 host에 접속을 할 것 인지 확인을 거치게 됨.
host에 접속이 최초인지 아닌지 ssh가 확인하는 방법은 Known_hosts 파일을 통해서 진행함.
Known_hosts 파일에 host의 내용이 존재하지 않으면 해당 메세지를 출력해서 확인을 필요로 하고
"yes"를 입력하게 되면 Known_hosts 파일에 host 정보와 key를 저장하고
이후에는 묻지 않고 연결함.
 
즉 해당 오류가 발생한 상황은 아래 image와 같이 known_hosts 파일이 없거나
아니면 해당 파일에 정보가 없는 경우 발생함.

 

 
 

해결책

ssh 연결 시 known_hosts 파일에 host 정보를 저장하는건 ssh-keyscan 명령으로 진행함.
예) ssh-keyscan -t rsa 10.0.2.10
하지만 ansible 을 사용하는 경우 host의 수가 매우 많음으로 
해당 명령어를 script 형식으로 진행해야함.
이를 자동화 해주는 ansible playbook 은 아래와 같음
---
- hosts: all 
  connection: local
  serial: 1 
  gather_facts: no
  tasks:
  - command: /usr/bin/ssh-keyscan -t rsa {{ ansible_host }} 
    register: keyscan 
  - lineinfile:
      name=~/.ssh/known_hosts
      create=yes
      line={{ item }}
    with_items:
      - "{{ keyscan.stdout_lines }}"
 
 

옵션 설명

"connection : local"
localhost에서 해당 playbook을 진행함.
 
"serial: 1"
여러 호스트를 동시에 처리하지 않고 한 호스트 씩 처리
 
"command"
Inventory에 등록된 host 정보는 "{{ ansible_host }}"변수에 저장되어있음
host를 불러와 하나씩 대입
 
"register"
command 결과를 keyscan 변수에 저장
 

playbook 실행 결과

known_hosts 파일 확인해보면 
host 정보가 정상 추가되어있음.

 
이후 
"Are you sure you want to continue connecting (yes/no)"
메세지 없이 모든 host에서 playbook script가 정상 실행됨.
 

 
참고

 

반응형