일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 쿠버네티스
- 메탈LB
- Kubernets on Jenkins
- jenkins
- Solution Architecture
- helm
- EKS 클러스터
- 솔데스크
- Kubernetes
- SAA 합격 후기
- AWS 딥레이서
- 딥레이서 보상함수
- terraform
- Aurora cluster
- Firelens
- livenessPorbe
- 깃허브 액션
- EFS CSI Driver
- github action 사용법
- Prometheus install
- 그라파나 대시보드
- blue-green
- 쿠버네티스 컴포넌트
- 로드밸런서 컨트롤러
- 딥레이서
- 그라파나 시각화
- grafana on kubernetes
- LoadBalancer Controller
- kubernetes 동작 원리
- headless service
Archives
mingming
Ansible - 관리 노드 연결 ( SSH Key & Password ) 본문
관리 노드 연결
- Ansible의 제어 노드는 기본적으로 OpenSSH를 통해 접속하게 됩니다.
- Ansible은 기본적으로 제어 노드의 현재 로그인 된사용자와 같은 이름의사용자를 사용하여 관리 노드에 연결합니다. 또한 기본적으로 제어 노드의 SSH 키로 인증을 시도합니다.
- 인증 방식으론 SSH 패스워드 인증과 SSH 키 기반 인증 두가지가 있습니다.
SSH Key 기반 인증
1. SSH Key 생성
ssh-keygen -f ~/.ssh/id_resa
2. 관리 노드에 SSH 키 복사
ssh-copy-id worker
SSH 패스워드 인증
- Ansible 구성 파일에 ask_pass =true 설정
- ansible/ansible-playbook 명령 : -k 옵션 혹은 --ask-pass 옵션 사용
호스트 키 확인
- SSH 접속 대상에 대한 호스트 키는 ~/.ssh/known_hosts 파일에 존재합니다. Ansible은 기본적으로 SSH 접속 대상에 대한 호스트 키 검사가 활성화 되어 있습니다.
- 만약 한 번도 접속한 적 없는 호스트라면 제어 노드에 대한 키 정보가 없기 때문에 오류가 발생하게 됩니다.
- Ansible을 이용해 관리 노드로 접근하기 전에 먼저 SSH 지문을 확인해 known_hosts 파일에 기록합니다
- 구성 파일을 이용해 호스트 키 확인을 비활성화 합니다.
[defaults]
host_key_checking=false
사용자 변경
- Ansible은 SSH 인증할 사용자를 설정하지 않으면 제어 노드의 현재 사용자 이름으로 관리 노드에 접근합니다.
- Ansible 구성 파일에 접근할 사용자 이름을 지정할 수 있습니다.
[defaults]
remote_user=<remote_user>
- -u 옵션 혹은 --user 옵션을 사용해 접근할 사용자 이름을 지정할 수 있습니다.
- 플레이북에 remote_user를 지정할 수 있습니다.
---
- hosts:
remote_user=<remote_user>
권한 상승
- 관리 노드에 접근한 사용자가 root 권한을 이용하기 위한 설정입니다. 패키지 설치 혹은 시스템 관리자 권한으로 작업해야 하는 경우 반드시 필요합니다.
- 권한 상승을 위해 Ansible 구성 파일을 설정할 수 있습니다.
[priviilege_escalation]
become=true
- -b 옵션 혹은 --become 옵션을 사용할 수 있습니다.
- 플레이북에 지정할 수 있습니다.
---
- hosts: webservers
become: true
Passwordless sudo 설정
- 기본적으로 패스워드 인증 없이 권한 상승을 이용하기 위해선 sudoers 파일에 기록이 되어 있어야 합니다.
- /etc/sudoers 또는 /etc/sudoers.d/<FILE> 파일을 생성하거나 수정합니다.
- sudo 명령어를 실행할 때 비밀번호를 요구하지 않아야 합니다.
USER_NAME ALL=(ALL) NOPASSWD: ALL
Password sudo 설정
- Ansible 구성파일 설정
[privilege_escalation]
become_ask_pass=true
- -K 또는 --ask-become-pass 옵션을 사용할 수 있습니다.
실습 1. 제어 노드의 ssh-key를 관리 노드에 전송하는 플레이북 작성
1. 인벤토리 파일 작성
[worker]
192.168.56.112
2. ansible.cfg 구성 파일 작성
[defaults]
inventory=./inventory
remote_user=slave
ask_pass=true
3. 플레이북 작성
---
- name: ssh key test
hosts: all
tasks:
- name: ssh key test
authorized_key:
user: slave
state: present
key: "{{ item }}"
with_file:
- ~/.ssh/id_rsa.pub
4. 플레이북 실행
ansible-playbook deploy_ssh_key.yaml
[master@master ansible_ssh_key_test]$ ansible-playbook deploy_ssh_key.yaml
SSH password:
PLAY [ssh key test] ************************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.56.112]
TASK [keycopy] *****************************************************************
changed: [192.168.56.112] =>
PLAY RECAP *********************************************************************
192.168.56.112 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
실습 2. 관리 노드에 user01 사용자를 만들고 sudo 권한을 사용할 때 비밀번호를 요구하지 않도록 설정해 user01 사용자에게 root 권한을 사용하여 id_rsa.pub 파일을 전달하는 플레이북을 작성
1. ansible.cfg 파일 수정
[defaults]
inventory=./inventory
[privilege_escalation]
become_user=root
become_method=sudo
2. user 생성하는 플레이북 작성
---
- name: create user01
hosts: worker
remote_user: slave
become_ask_pass=true
tasks:
- name: use user module
user:
name: user01
- name: passwordless setting
lineinfile:
path: /etc/sudoers
line: "user01 ALL=(ALL) NOPASSWORD: ALL"
3. ssh 공개키 전송하는 플레이북 작성
---
- name: ssh key
hosts: worker
tasks:
- name: key copy
authorized_key:
user: user01
state: present
key: "{{ item }}"
with_file:
- ~/.ssh/id_rsa.pub
'새싹 하이브리드 클라우드 > Ansible' 카테고리의 다른 글
Ansible - 반복문 & 조건문 (1) | 2023.11.19 |
---|---|
Ansible - 변수 (0) | 2023.11.18 |
Ansible - ad-hoc & playbook (0) | 2023.11.18 |
Ansible - 설치 & 인벤토리 및 구성파일 (0) | 2023.11.10 |