Ansible

AeZan·2024년 6월 28일
0

설치

# 패키지 설치를 위한 저장소 확장 설치
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
-> 수동으로 확장 버전 설치

inventory 파일


기본 인벤토리 - 그룹없이 개별 작성

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
  • 192.168.56.9: ungrouped 호스트 그룹
  • [severa]: servera 호스트 그룹
  • all: 모든 관리 호스트들(파일에서 직접 보이지 않음)

여러 그룹을 하나의 그룹으로 작성

[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 연결

키 만들어서 관리 호스트에 키 전달하기 (ssh-cpoy-id 사용하지 않고, ansible 사용)

기본적으로 inventory, ansible.cfg, playbook 이 필요함

  1. 작업 디렉토리 생성
    mkdir ansible_ssh_key_test
    cd ansible_ssh_key_test

  2. 인벤토리 파일 생성
    vim inventory
    192.168.56.102

  3. ansible 설정 파일 생성

[defaults]
inventory = ./inventory
remote_user = jin
ask_pass = True
  1. 플레이북 작성
    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 항목과 다름, - 는 작업과 작업을 구분함)
  1. 키 생성
    master 에서 ssh-keygen
  1. 플레이북 실행
    ansible-playbook deploy_ssh_key.yaml

오류나면 fingerprint 해주기! 처음 한번 ssh 해주기

  1. 확인 작업

한번 더 실행해보기

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

권한 에스컬레이션

권한이 높은 사용자로 바꿔서 자동화를 수행해주는 기술

  1. 작업 디렉토리 생성
    mkdir ansible_ssh_key_test2/
    cd ansible_ssh_key_test2

  2. 인벤토리 파일 작성
    vim inventory
    192.168.56.102

  3. 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
  1. root 권한 사용을 위해 등록

worker node

root 로 전환
su -

[user name] 의 보조그룹에 wheel 그룹 추가
usermod -G wheel [user name]

  1. 플레이북 파일 복사
    cp ~/ansible_ssh_key_test/deploy_ssh_key.yaml .

  2. 플레이북 실행
    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 가 출력됨

0개의 댓글

관련 채용 정보