# 패키지 설치를 위한 저장소 확장 설치
sudo yum install -y epel-release
# 앤서블 설치 (control node)
sudo yum -y install ansible
# Ansible 버전 확인
ansible --version
# 모듈을 이용한 Ansible 버전 확인
ansible -m setup localhost | grep ansible_python_version
+) python 버전이 2.7 이상이어야 함
yum 으로 설치 실패 시 수동 설치 방법
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install epel-release-latest-7.noarch.rpm
-> 수동으로 확장 버전 설치
기본 인벤토리 - 그룹없이 개별 작성
192.168.0.102
www.worker.com
#도메인 네임을 넣을 때는 /etc/hosts가 인식하는 것이 아닌 DNS가 인식하는 도메인 네임을 넣어야 함
그룹으로 작성
192.168.56.9
[servera]
www.worker.com
192.168.56.10
[serverb]
192.168.56.11
여러 그룹을 하나의 그룹으로 작성
[servera]
www.worker.com
[serverb]
192.168.56.102
[server:children]
servera
serverb
# 그룹을 따로 하나의 그룹으로 묶어줄 경우 [그룹이름:children] 으로 입력
인벤토리에 목록이 있는지 확인
ansible www.worker.com --list-hosts
-> /etc/ansible/ansible.cfg 에 지정한 경로의 인벤토리 파일의 항목에서 찾음
ansible www.worker.com --list-hosts -i inventory1
설정 파일에 경로에 인벤토리 파일이 없으면, 위와 같이 작성해서 직접 인벤토리 지정해서 보기
ansible ungrouped --list-hosts -i inventory1
ansible all --list-hosts -i inventory1
현재는 유저 홈에 생성해서 첫번째 명령어로 관리 호스트를 찾지 못함
+) /etc/bashrc 보다 사용자 홈디렉토리의 .bashrc 우선순위가 더 높음
manual
현재 디렉토리 ./ansible.cfg
홈 디렉토리 ~/ansible.cfg
설치 시 자동 생성
설정 디렉토리 /etc/ansible/ansible.cfg
설정 파일 우선순위
./ansible.cfg > ~/ansible.cfg > /etc/ansible/ansible.cfg
관리 용이를 위해 현재 디렉토리에 설정, 인벤토리 파일, 플레이북 파일을 같이 둠
홈 디렉토리는 거의 안쓰고, 설정 디렉토리는 전체 설정을 할 때 사용
설정 파일 구문
ansible.cfg (이름은 이와 같이 명시해야함)
[defaults]
inventory = ./inventory1 #인벤토리 파일 위치
remote_user = jin #ssh 연결할 사용자명
ask_pass = True #ssh 연결 | 키 기반 인증 - False, 비밀번호 기반 인증 - True
become = True #사용자 전환에 대한 여부 (True - 사용자 변경, False - 사용자 그대로 사용)
become_method = sudo (사용자 전환 방식 - 주로 sudo 사용)
become_user = user (어떤 사용자로 전환할 것인지 지정)
become_ask_pass = True (sudo를 사용할 때 암호 요구 여부)
키 만들어서 관리 호스트에 키 전달하기 (ssh-cpoy-id 사용하지 않고, ansible 사용)
기본적으로 inventory, ansible.cfg, playbook 이 필요함
작업 디렉토리 생성
mkdir ansible_ssh_key_test
cd ansible_ssh_key_test
인벤토리 파일 생성
vim inventory
192.168.56.102
ansible 설정 파일 생성
[defaults]
inventory = ./inventory
remote_user = jin
ask_pass = True
vim deploy_ssh_key.yaml
--- #플레이북 시작을 알림
- name: ssh key test
hosts: all [직접 호스트 넣어줘도 됨]
tasks:
- name: key copy
authorized_key:
user: jin
state: present # 존재하는지 확인
key: "{{ item }}"
with_file:
- ~/.ssh/id_rsa.pub
# - name: ssh key test2 (위 name 항목과 다름, - 는 작업과 작업을 구분함)
ssh-keygen
ansible-playbook deploy_ssh_key.yaml
오류나면 fingerprint 해주기! 처음 한번 ssh 해주기
한번 더 실행해보기
ssh 접속
새로운 키 만들어서 넘겨보기
ssh-keygen -f ~/.ssh/key-pass
앞선 실습에서 이미 키가 넘어가 있기 때문에 설정 파일 수정
-> 비밀번호 요구 설정 False
[defaults]
inventory = ./inventory
remote_user = jin
ask_pass = False # 변경
플레이북
---
- name: ssh key test
hosts: all
tasks:
- name: key copy
authorized_key:
user: jin
state: present
key: "{{item}}"
with_file:
- ~/.ssh/key-pass.pub # 파일명 변경
ansible-playbook deploy_ssh_key.yaml
권한이 높은 사용자로 바꿔서 자동화를 수행해주는 기술
작업 디렉토리 생성
mkdir ansible_ssh_key_test2/
cd ansible_ssh_key_test2
인벤토리 파일 작성
vim inventory
192.168.56.102
ansible.cfg 작성
vim ansible.cfg
[defaults]
inventory = ./inventory
remote_user = jin
ask_pass = False
[privilege_escalation]
become = True
become_user = root
become_method = sudo
become_ask_pass = True
worker node
root 로 전환
su -
[user name] 의 보조그룹에 wheel 그룹 추가
usermod -G wheel [user name]
플레이북 파일 복사
cp ~/ansible_ssh_key_test/deploy_ssh_key.yaml .
플레이북 실행
ansible-playbook deploy_ssh_key.yaml
BECOME password: [user 의 비밀번호] # jin 의 비밀번호
id_rsa 가 넘어가면 비밀번호 안 물어봄
id_rsa 가 넘어가지 않고 key-pass 만 넘겼다면 자동으로 키를 인식하지 못 하기 때문에 설정 파일에 강제로 인식
vim ansible.cfg
private_key_file = ~/.ssh/key-pass
위처럼 작성하면 첫번째 키를 넘겨주고 ansible.cfg 파일의 ask_pass = False 를 주게 되면 두번째 키 넘기기에서 실패함
{{ item }}
와 같이 공백을 넣어줘야 두번째 키에서 오류가 안남
인줄 알았으나 마지막 실습에서 다시 오류.
ssh 인증을 비밀번호 기반으로 하고 있음 왜지?
권한 문제였음 모든 사용자에게 홈디렉토리가 접근 가능하도록(771) 열려 있어 키 인증이 필요 없어 비밀번호 인증을 요구 한것
chmod 777 jin
으로 권한 변경 후 비밀번호 없이 키인증으로 접속
권한이 771 일때 sshd_config 의 password 인증을 no 로 변경해주고 접속하려 하면 아예 permission denied 가 출력됨