일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- leetcode
- terraform
- 자바스크립트
- FastAPI
- IAM
- github
- event loop
- elasticsearch
- ansible
- Deployment
- intervals
- AWS
- IAC
- WSGI
- POD
- DevOps
- 쿠버네티스
- Kubernetes
- Django
- dockerfile
- YAML
- K8S
- Python
- Service
- asgi
- EKS
- asyncio
- EC2
- ebs
- docker
- Today
- Total
궁금한게 많은 개발자 노트
[ Ansible ] Ansible SSH Setting 본문
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
'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 |