궁금한게 많은 개발자 노트

[ Ansible ] Ansible SSH Setting 본문

DevOps

[ Ansible ] Ansible SSH Setting

궁금한게 많은 개발자 2023. 1. 8. 22:31

Ansible SSH Setting

 

ansible server에서 remote(ansible node)로 접속하여 작업하기 위해서는 ssh설정이 필요합니다.

ansible은 ssh를 사용하는 provisioning service이기 때문입니다. 이러한 설정을 접속이 필요할 때마다 입력하기엔 번거로움이 있으므로 ssh-agent를 사용하면 편리하게 허가를 받은 상태로 접속이 가능합니다.

 

Authorized Keys는 Know Host처럼 관리하여 이미 접속허가 받은 사용자로 기록을 할 수 있습니다. 접속하려는 ansible node에 ansible server의 public ssh key를 등록하면 private ssh key를 통해 암호없이 ansible node에 접속이 가능합니다.

.ssh/authorized_keys파일은 ansible node(destination)에 저장됩니다.

# 1) ssh key 생성
> ssh-keygen -t rsa

# 2) ssh public key를 remote서버로 복사
#    remote server의  ~/.ssh/authorized_keys에 추가된다. 
> ssh-copy-id rts@192.x.x.x

# 3) ssh-agent를 사용하면 매번 패스워드를 입력할 필요없이 
#    ssh-agent에서 패스워드 관리를 자동화
> ssh-agent bash
> ssh-add ~/.ssh/id_rsa

 

반대로 ansible server에서도 접속하려는 ansible node가 믿을만한 대상인지를 확인하는 know hosts를 관리합니다. ansible node들의 key를 .ssh/known_hosts파일에 저장해두면 마찬가지로 node에 접속 시 사용자에게 별도의 확인 절차를 거치지 않습니다. known_hosts파일에 inventory host를 등록

- name : copy ssh public key to remote server
  authorized_key: user=rts key="{{ lookup('file', 'data/id_rsa.pub') }}"

# - name: debug hostname
#   debug: msg="hostname is {{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
#   # debug: msg="host ip is {{ hostvars[item]['ansible_default_ipv4']['address'] }}"
#   with_items:  groups['all']

- name: register all host ip of inventory file
  debug: msg="{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']  }}"
  register: host_ip
  with_items: groups['all']


- name: For each host, scan for its ssh public key
  shell: "ssh-keyscan {{ item.msg }} "
  with_items: "{{ host_ip.results }}"
  register: ssh_known_host_results
  ignore_errors: yes

- name: print ip
  debug:
    msg: "IP is  {{ item.item.msg }}"
  with_items: "{{ ssh_known_host_results.results }}"
#
- name: Add/update the public key in the '{{ ssh_known_hosts_file }}'
  known_hosts:
    name: "{{ item.item.msg }}"
    key: "{{ item.stdout }}"
    path: "/home/rts/.ssh/known_hosts"
  with_items: "{{ ssh_known_host_results.results }}"

 

ansible posix authorized_key를 사용하여 yml파일을 통해 자동으로 ssh public key를 ~/.ssh/authorized_keys에 추가

- name: Set authorized key taken from file
  ansible.posix.authorized_key:
    user: charlie
    state: present
    key: "{{ lookup('file', '/home/charlie/.ssh/id_rsa.pub') }}"
    exclusive: true  # 다른 모든 지정되지 않은 key를 삭제할 지 여부

https://runebook.dev/ko/docs/ansible/collections/ansible/posix/authorized_key_module

 

ansible.posix.authorized_key – SSH 인증 키를 추가하거나 제거합니다. 참고 이 플러그인 부분은sible.posix

Documentation Contributors History

runebook.dev

 

'DevOps' 카테고리의 다른 글

[ AWS ] Amazon FSx  (0) 2023.01.09
[ AWS ] EFS - Elastic File System  (0) 2023.01.09
[ Ansible ] Ansible Vault  (0) 2023.01.08
[ Ansible ] Ansible이란?  (0) 2023.01.07
[ Docker ] Docker란?  (0) 2023.01.07
Comments