🌐 Ansible로 서버 관리 자동화하기
💡 실습 목표
- Ansible을 사용하여 서버 관리 작업을 자동화하고, HTTPD와 NGINX 웹 서버를 설치하고 관리한다.
- SSH 키 기반 접속 설정으로 비밀번호 없이 Ansible 작업을 수행한다.
- Ansible 플레이북을 작성하여 반복 작업을 자동화하고 관리 효율성을 높인다.
- Ansible 모듈을 사용하여 웹 서버 설치, 시작, 방화벽 설정, 파일 관리 작업을 자동화한다.
🛠️ Ansible 설정과 SSH 키 기반 접속
1. SSH 키 기반 접속 설정
키 생성 명령어
bash
복사편집
ssh-keygen -t ed25519 -C "ansible_key"
💡 TIP:
- ed25519: RSA보다 더 빠르고 보안성이 뛰어남
- 키 위치: 기본적으로 ~/.ssh/id_ed25519에 저장
- C 옵션: 키에 주석을 추가하여 식별 용이
키 전송 명령어
bash
복사편집
ssh-copy-id -i ~/.ssh/id_ed25519.pub rockylinux@192.168.111.131
💡 TIP:
- ssh-copy-id: SSH 공개 키를 원격 서버로 전송하여 설정
- -i 옵션: 공개 키 파일 지정
- 설정이 완료되면 비밀번호 없이 접속할 수 있음
2. Ansible 인벤토리 설정
인벤토리 파일 수정
bash
복사편집
vi /etc/ansible/hosts
설정 예시
bash
복사편집
[serverd] 192.168.111.131 ansible_user=rockylinux ansible_ssh_private_key_file=/root/.ssh/id_ed25519
💡 TIP:
- ansible_user: 원격 서버에 접속할 사용자 지정
- ansible_ssh_private_key_file: SSH 키 파일 경로
- 인벤토리 파일은 Ansible이 관리할 호스트 목록을 지정하는 데 사용
3. 접속 테스트
기본 접속 명령어
bash
복사편집
ansible all -m ping
💡 TIP:
- ping 모듈: 원격 서버와의 연결 상태를 확인
- all: 인벤토리 파일에 설정된 모든 서버에 대해 명령 실행
- 성공 시 pong 응답이 출력됨
💻 Ansible 기본 명령어
1. 파일 수정 시 멱등성 보장
lineinfile 모듈 사용
bash
복사편집
ansible localhost -m lineinfile -a "path=myfile line=test4"
💡 TIP:
- lineinfile 모듈: 특정 파일에 줄을 추가하거나 수정
- 멱등성 보장: 이미 추가된 줄이 있을 경우 중복되지 않음
- 서버 설정이나 환경 변수 추가 시 유용
Shell 모듈 사용 (비권장)
bash
복사편집
ansible localhost -m shell -a "echo test4 >> myfile"
💡 TIP:
- shell 모듈은 직접 명령어를 실행하는 방식이라 멱등성이 보장되지 않음
- 중복 실행 시 동일한 줄이 여러 번 추가될 위험이 있음
- 설정 파일이나 구성 관리에 적합하지 않음
🌱 Ansible로 웹 서버 설치 자동화 - NGINX 예시
🔧 NGINX 자동 설치 플레이북 작성
YAML 파일 작성 규칙
- 들여쓰기는 2칸씩 (Tab 사용 금지)
- - name: 형식으로 작업 이름 지정
- key: value 형태로 모듈과 인자를 구분하여 작성
NGINX 설치 플레이북 (nginx.yaml)
yaml
복사편집
--- - name: NGINX 설치 및 설정 hosts: all become: yes tasks: - name: NGINX 설치 yum: name: nginx state: latest - name: index.html 복사 copy: src: /root/index.html dest: /usr/share/nginx/html/index.html - name: NGINX 시작 service: name: nginx state: started - name: 방화벽 설정 (HTTP 허용) firewalld: service: http permanent: yes state: enabled immediate: yes
💡 TIP:
- become: yes: 관리자 권한으로 실행
- yum 모듈: NGINX 패키지 설치
- copy 모듈: index.html 파일 복사
- service 모듈: NGINX 서비스 시작
- firewalld 모듈: 방화벽 설정
💻 플레이북 실행 명령어
bash
복사편집
ansible-playbook nginx.yaml
💡 옵션:
- --list-hosts: 명령이 실행될 호스트 목록 확인
- --check: 실제 실행 없이 변경 사항을 미리 확인
🌐 웹 서버 제거 자동화 - NGINX 제거 플레이북
NGINX 제거 플레이북 (nginx_remove.yaml)
yaml
복사편집
--- - name: NGINX 제거 hosts: serverd tasks: - name: NGINX 중지 service: name: nginx state: stopped - name: 방화벽 닫기 firewalld: service: http permanent: yes state: disabled immediate: yes - name: index.html 삭제 file: path: /usr/share/nginx/html/index.html state: absent - name: NGINX 패키지 제거 yum: name: nginx state: absent
💡 TIP:
- file 모듈: 특정 경로의 파일 삭제
- state: absent: 파일이 없는 상태로 유지
✅ 실습 결과
- SSH 키 기반 접속 설정 완료하여 비밀번호 없이 Ansible 작업 수행
- NGINX 웹 서버 설치, 시작, 방화벽 설정을 자동화하여 배포
- NGINX 웹 서버 제거, 방화벽 닫기 및 파일 삭제 자동화 구현
- lineinfile 모듈을 사용하여 설정 파일 수정 시 멱등성 확보
- 플레이북을 통한 반복 작업 자동화로 관리 효율성 증대
📝 결론
Ansible을 사용하여 서버 관리 작업을 자동화하면 효율성과 일관성을 크게 높일 수 있습니다. 특히 SSH 키 기반 접속 설정으로 비밀번호 없이 안전하게 관리할 수 있으며, lineinfile 모듈을 사용하여 설정 작업의 멱등성을 확보할 수 있습니다. HTTPD와 NGINX 웹 서버를 각각 설치하고 제거하는 과정을 자동화하여 서버 관리의 복잡성을 줄였습니다.
💡 다음 목표:
- Ansible을 사용한 대규모 서버 관리 자동화
- Ansible Tower 도입으로 GUI 기반 관리 강화
- 복잡한 서비스 구성을 위한 플레이북 작성과 관리 최적화
'02. 클라우드 보안 공부 > 실습로그' 카테고리의 다른 글
✅ [실습로그] Nmap을 이용한 클라우드 보안 취약점 분석 (0) | 2025.05.19 |
---|---|
✅ [실습로그] Ansible을 활용한 FTP와 DNS 서버 자동화 - 설치부터 설정까지 (0) | 2025.05.17 |
✅ [실습로그] Ansible로 SSH 키 기반 서버 관리 자동화 - HTTPD와 NGINX 배포 (0) | 2025.05.17 |
✅ [실습로그] 무차별 대입 공격 - Hydra와 Medusa 활용법 (0) | 2025.05.17 |
✅ [실습로그] Snort 기반 IDS/IPS 설정 - 침입 탐지와 방지 시스템 구축 (0) | 2025.05.15 |