본문으로 바로가기

https://www.inflearn.com/course/ansible-%EC%8B%AC%ED%99%94

 

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

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

www.inflearn.com

 

CH 1. 실습 환경 구성하기

ㅇ 베이그런트를 이용한 실습 환경 구성

- GIt : https://github.com/sysnet4admin/_Lecture_Ansible.expert

- vagrant up 으로 실행 후, ping 모듈 확인

- ans nodes -m ping 으로 ssh key yes로 획득 후, ans nodes -m ping -k 로 진행

 

ㅇ 자동으로 Known_hosts에 등록하기

- 알려진 호스트 (known_hosts)

 > 이미 알고 있어, 확인하지 않아도 되는 믿을 수 있는 호스트

  1. 앤서블 노드에 접속을 시도

  2. 접속하려는 대상이 믿을만 한지 사용자에게 확인 요청

  3. 사용자에 확인이 끝난 이후에 접속 대상의 key를 저장 (~/.ssh/known_hosts)

 

- known_hosts에 등록할때 필요한 내용 확인 명령어

 # /usr/bin/ssh-keyscan -t ecdsa 192.168.1.102

- serail: 1 은 현재 노드들에 대한 task를 하나씩 실행하도록 함 

  => known_hosts 파일에 누락을 방지하기 위한 옵션 (튜닝때 자세히)

- 유닉스 리눅스 계열에서는 개행문자가 LF 인데 , 윈도우는 CR LF 이다. 이건 nodepad++ 에서 변경할 수 있다.

- Auto_known_hosts.yml

 => ansible_host 가 keyscan에 저장되고 item에 들어가게된다.

---
- 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 }}"

 

ㅇ 자동으로 authorized_keys 등록하기

- authorized_keys : 이미 사용 허가를 받아서 믿을 수 있는 사용자.

- 진행 과정

  1. 앤서블서버가 노드에 접속을 시도

  2. 앤서블 노드의 ~/.ssh/authorized_keys 파일의 존재를 확인

  3. authorized_keys 내용에 접속자의 접속을 허가할 수 있는 정보가 저장되어 있는지 확인하고 접속을 허용함

- 실제로는 여러번 필요값을 입력해야하나 아래 명령어로 pub key 생성

 # ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ""

- 위 명령어를 node를 hosts로 실행되도록 작성하는데, connection:local 로 하여 ansible-server에서 pub key를 생성되도록 함 , run_once 로 ansible-server에서는 한번만 실행되도록 함

 

- 아래 파일을 실행 과정은

 1. 퍼블릭 키를 서버에서 생성

 2. 그 키값을 register에 저장

 3. register의 값을 .ssh/authorized_keys 파일에 추가함

 

- Auto_authorized_keys.yml

---
- hosts: nodes
  gather_facts: no

  tasks:
  - name: ssh-keygen
    connection: local
    command: "ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ''"
    ignore_errors: yes
    run_once: true

  - name: read id_rsa.pub
    connection: local
    command: "cat ~/.ssh/id_rsa.pub"
    register: id_pub
    run_once: true

  - name: remote lineinfile for authorized_keys
    lineinfile:
      dest: /home/vagrant/.ssh/authorized_keys
      line: "{{ id_pub.stdout }}"

 

이후 ansible-server 에서 # ans all -m ping 하면 -k를 붙일필요도 패스워드 입력할 필요도 없다.