- 이미 사용 허가를 받아서 믿을 수 있는 사용자
1. ansible에서 authorized_keys 저장하는 순서
- ansible 서버에서 ansible 클라이언트에 접속 시도
- ansible 클라이언트는 ~/.ssh/authorized_keys 파일의 존재 확인
- authorized_keys 파일 내용에 ansible 서버의 정보가 저장되어있는 지 확인하고, 있다면 접속을 허가
2. ssh-keygen 명령어 사용
- ssh-keygen 명령어를 통해 생성된 공개키(.pub)를 ansible 클라이언트에 전달하여 암호없이 접근 가능하게 해줌
- authorized_keys에 저장하는 데 사용하는 명령어 ssh-keygen 옵션 설명
- -b 옵션 : 생성할 키의 비트수를 지정
- 2048 : rsa 키는 2048 비트로 결정 (rsa는 최소 768 비트가 필요)
- -t 옵션 : 암호화 타입을 결정
- rsa : 공개키 암호화에서 가장 널리 사용되는 알고리즘
- -f ~/.ssh/id_rsa : 저장할 파일명 지정
- -q 옵션 : ssh-keygen의 질의 응답을 생략
- -N "" : 새 암호를 빈값으로 해서 제공
$ ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ""
3. 자동으로 authorized_keys를 저장해주는 플레이북(playbook)
hosts: all → /etc/ansible/hosts에 저장되어있는 모든 IP 호스트들을 대상
gather_facts: no → facts를 수집하지 않는다는 것 → Facts 는 원격 대상 시스템의 호스트 네임, CPU, Memory 정보 등을 수집하는 setup 모듈 (불필요한 시간 소모를 막아줌)
connection=local → Ansible 이 ssh로 명령어를 날리지 않도록 하기 위한 것
ignore_errors: yes → ansible 스크립트에서 실행한 결과가 성공인지 실패인지 출력하지 않고 실행만 시킴
run_once: true → 명령어 1회만 실행됨
register: id_pub → 플레이북에서의 결과를 id_pub 변수로 지정
lineinfile → 이미 존재하는 파일에 내가 추가할 라인이 있는지 체크하고, 없는 경우에만 추가하고 싶은 경우에 lineinfile module을 사용 (ansible의 멱등성 지원)
dest → id_pub가 저장되는 위치인 /root/.ssh/authorized_keys임
id_pub.stdout → /root/.ssh/authorized_keys에 id_rsa.pub을 저장
$ vi auto_authorized_keys.yml --- - hosts: all 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: /root/.ssh/authorized_keys line: "{{ id_pub.stdout }}"
4. 플래이북 실행 결과
ansible 서버에서 플레이북 실행
$ ansible-playbook auto_authorized_keys.yml -k SSH password: PLAY [all] ******************************************************************* TASK [ssh-keygen] ************************************************************ changed: [192.168.1.13] TASK [read id_rsa.pub] ********************************************************* changed: [192.168.1.13] TASK [remote lineinfile for authorized_keys] **************************************** changed: [192.168.1.13] PLAY RECAP ******************************************************************* 192.168.1.13 : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 # -k 옵션 없이 ansible 서버에서 ansible 클라이언트 ansible 명령어 실행 $ ansible all -m ping 192.168.1.13 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
- ansible 클라이언트인 192.168.1.13에서 /root/.ssh/authorized_keys 파일 확인
$ cat /root/.ssh/ssh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuIvAkdFC/ltBW3j1oMIzoVAvo0Gr0rWPuZ8e+YdMnXd3YMCZ0DTrqd+B9TW/C56rCU7oD7thMb4JgZiLoUim87xYmVStSmacCGLEpfU6vcLJN/s4iu+oH0aSf/rWCDqElGun8kU5SdyILFLG8dtR/hHy7mvZjmE5Fm9OzuXIo+6wWeXx7I7UHUwL4b1FXaQwlw72IjLMC0BEcJCqxbnw+N9GWtzxkPMog++8EQ0JrLsnhGPNGoH8viI6jzitJwDQsxFenHEmoMZPTZxr4z2Yzct45GiTa5BRIpiqx3Oq/2wFuqC67oJIMOl+v/0xxa4UXv1qmL42KaSlUbtzz2wHj
'Ansible(앤서블)' 카테고리의 다른 글
ansible의 When → ansible 조건문 사용 (0) | 2022.07.24 |
---|---|
ansible의 FACT(s) → ansible 동적 할당 변수 사용 (0) | 2022.07.24 |
ansible의 플레이북(playbook) (0) | 2022.07.24 |
ansible 명령어 간단한 사용 예시 (0) | 2022.07.24 |
ansible 명령어 옵션 정리 (계속 업데이트 예정) (0) | 2022.07.24 |