728x90

known_hosts란

- 알려진 호스트

- 이미 알고 있어 확인하지 않아도 되는 호스트

 

Vagrantfile 파일 수정

Ansible Server 영역에 두 줄 추가

    cfg.vm.provision "file", source: "auto_pass.yml", destination: "auto_pass.yml"
    cfg.vm.provision "shell", inline: "ansible-playbook auto_pass.yml", privileged: false
  #================#
  # Ansible Server #
  #================#
  
  config.vm.define "ansible-server" do |cfg|
    cfg.vm.box = "centos/7"
    cfg.vm.provider "virtualbox" do |vb|
      vb.name = "Ansible-Server"
      end
    cfg.vm.host_name = "ansible-server"
    cfg.vm.network "public_network", ip: "172.30.1.100"
    cfg.vm.network "forwarded_port", guest: 22, host: 60010, auto_correct: true, id: "ssh"
    cfg.vm.synced_folder "../data", "/vagrant", disabled: true
    cfg.vm.provision "shell", inline: "yum install epel-release -y"
    cfg.vm.provision "shell", inline: "yum install ansible -y"
    cfg.vm.provision "file", source: "ansible_env_ready.yml", 
      destination: "ansible_env_ready.yml"
    cfg.vm.provision "shell", inline: "ansible-playbook ansible_env_ready.yml"
    cfg.vm.provision "file", source: "auto_pass.yml", destination: "auto_pass.yml"	# 추가
    cfg.vm.provision "shell", inline: "ansible-playbook auto_pass.yml", privileged: false	# 추가
  end

 

ansible_env_ready.yml 파일 수정

해당 부분 지우기

    - name: Generate sshkey
      become: yes
      become_user: vagrant
      shell: "{{ item }}"
      with_items:
        - "ssh-keyscan 172.30.1.101 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.102 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.103 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.104 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.105 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.201 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.202 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.203 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.204 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.205 >> ~/.ssh/known_hosts"

 

auto_pass.yml 파일 생성

ansible_host: /etc/ansible/hosts 파일에 등록된 모든 호스트

keyscan.stdout_lines: keyscan 명령 실행 결과를 with_items를 이용해 지속적으로 출력함

  -> 출력 결과는 다시 ~/.ssh/known_hosts로 입력됨

 

---
- name: Create authority between server and nodes
  hosts: nodes
  connection: local
  serial: 1
  gather_facts: no

  tasks:
    - name: ssh-keyscan for known_hosts file
      command: /usr/bin/ssh-keyscan -t ecdsa {{ ansible_host }}
      register: keyscan

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

 

vag_reconf.bat 실행

- known_hosts 자동 등록을 위해 생성한 auto_pass.yml 파일과 수정한 Vagranfile이 제대로 적용되는지 vag_reconf.bat 파일을 실행하여 테스트 진행

- 파일 실행 결과: 모든 가상 머신이 삭제되고 재생성되어 결과 마지막 부분에서 known_hosts를 자동으로 등록한 것을 확인할 수 있음

 

[ 배치 파일의 LF, CR ]

- 유닉스/리눅스 OS의 경우 유닉스 타입의 LF( Line Feed: 커서를 현재 행의 다음 행으로, 즉 아래로 이동 )를 사용함

- 윈도우 OS의 경우 CR( Carriage Return: 커서를 현재 행의 제일 좌측으로 이동 )과 LF를 동시에 사용함 > 따라서 해당 파일을 실행하려면 CRLF( 커서를 다음 줄, 그 줄의 시작 부분으로 이동) 타입으로 변경하고 저장해야 함

 

@echo off
setlocal 
set /p name=어느 vagrant를 재구성 및 시작하시겠습니까? ^
모두는 그냥 enter를 입력 하세요: || set name=default

if %name%==default (
	vagrant halt && vagrant destroy -f && vagrant up
) else (
    vagrant halt %name% && vagrant destroy %name% -f && vagrant up %name%
)
PS C:\HashiCorp\udemy-ansible> .\vag_reconf.bat

통신 확인

- 모든 노드에 ping이 앤서블을 통해서 전달된 것을 확인할 수 있음

PS C:\HashiCorp\udemy-ansible> vagrant ssh ansible-server
[vagrant@ansible-server ~]$ ans nodes -m ping -k
SSH password: # vagrant

728x90

+ Recent posts