🌐 Ansible을 활용한 서버 관리 자동화
💡 실습 목표
- Ansible을 사용하여 서버 관리 자동화를 구현한다.
- SSH 키 기반 접속 설정을 통해 비밀번호 없이 작업을 수행한다.
- HTTPD와 NGINX 웹 서버를 자동 설치하고, 방화벽을 설정한다.
- Ansible 명령어와 모듈을 활용하여 다양한 서버 관리 작업을 자동화한다.
🛠️ Ansible 접속 설정
SSH 키 기반 접속 설정
키 생성
bash
복사편집
ssh-keygen -t ed25519 -C "ansible_key"
💡 TIP:
- ed25519는 기존 RSA에 비해 속도가 빠르고 보안성이 높음
- 키 위치: 기본적으로 ~/.ssh/id_ed25519에 저장됨
- 기타 키 타입: RSA, ECDSA 등도 사용 가능하지만 보안성 면에서 ed25519가 우수
키 전송
bash
복사편집
ssh-copy-id -i ~/.ssh/id_ed25519.pub rockylinux@192.168.111.131
💡 TIP: 키 전송 후에는 비밀번호 없이 접속 가능
- ssh-copy-id: 공개 키를 원격 서버에 복사하여 설정
- -i: 복사할 공개 키 파일 지정
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이 사용할 원격 접속 사용자
- ansible_ssh_private_key_file: SSH 키 파일 경로를 지정하여 비밀번호 없이 접속
접속 테스트
bash
복사편집
ansible all -m ping
예상 출력
ruby
복사편집
192.168.111.131 | SUCCESS => { "ping": "pong" }
💡 TIP:
- ping 모듈: 원격 서버와의 연결을 테스트하는 기본 모듈
- all: 인벤토리 파일에 설정된 모든 서버에 대해 명령을 실행
💻 Ansible 기본 명령어
1. 사용자가 접속 가능한지 확인
bash
복사편집
ansible all -m shell -a 'df -hT' -u rockylinux ansible all -m shell -a 'free -h' -u rockylinux
💡 TIP:
- -m shell: 셸 명령 실행 모듈
- -a: 명령어 인자
- 녹색 결과: 변경 사항 없음 (성공)
- 금색 결과: 변경 사항 발생
접속 호스트 목록 확인
bash
복사편집
ansible all --list-hosts
💡 TIP: 해당 명령이 실행되는 호스트를 리스트 형태로 확인할 수 있습니다.
🌱 Ansible로 웹 서버 설치
1. HTTPD 설치
HTTPD 설치 명령
bash
복사편집
ansible all -m yum -a "name=httpd state=present"
💡 TIP:
- yum 모듈: RHEL 계열 패키지 설치에 사용
- state=present: 패키지가 설치되어 있는 상태로 유지
설치 확인
bash
복사편집
ansible all -m shell -a 'rpm -qa | grep httpd'
💡 TIP:
- rpm -qa: 설치된 패키지 목록을 확인
- grep httpd: httpd 관련 패키지 필터링
2. index.html 파일 작성 및 복사
파일 작성
bash
복사편집
echo "Hello from Ansible" > /root/index.html
💡 TIP: HTML 파일을 미리 준비하여 복사할 수 있습니다.
파일 전송
bash
복사편집
ansible all -m copy -a "src=/root/index.html dest=/var/www/html/index.html"
💡 TIP:
- src: 로컬 경로
- dest: 원격 서버 경로
- copy 모듈: 파일 전송을 위한 기본 모듈
3. 웹 서버 구동
서비스 시작
bash
복사편집
ansible all -m service -a 'name=httpd state=started'
💡 TIP:
- service 모듈: 서비스 관리에 사용
- state=started: 서비스가 시작 상태로 유지
상태 확인
bash
복사편집
ansible all -m shell -a 'systemctl status httpd'
4. 방화벽 설정
HTTP 포트 열기
bash
복사편집
ansible all -m firewalld -a "service=http permanent=true state=enabled immediate=yes"
💡 TIP:
- permanent=true: 영구 적용
- immediate=yes: 즉시 반영
- HTTP 포트: 80번 포트를 개방하여 외부 접속 허용
📂 NGINX 서버 자동화
NGINX 설치
bash
복사편집
ansible all -m dnf -a "name=nginx state=present"
💡 TIP:
- dnf 모듈: 최신 패키지 관리용
- state=present: 설치 상태 유지
index.html 작성 및 복사
bash
복사편집
echo "Welcome to NGINX" > /root/nginx_index.html ansible all -m copy -a "src=/root/nginx_index.html dest=/usr/share/nginx/html/index.html"
NGINX 서비스 시작
bash
복사편집
ansible all -m service -a 'name=nginx state=started'
방화벽 설정
bash
복사편집
ansible all -m firewalld -a "service=http permanent=true state=enabled immediate=yes"
✅ 실습 결과
- SSH 키 기반으로 비밀번호 없이 Ansible 작업 수행
- HTTPD와 NGINX 웹 서버 설치 및 구동
- index.html 파일 작성 및 전송하여 웹 서버 테스트 완료
- 방화벽 설정을 통해 HTTP 포트 개방
- Ansible 기본 명령어를 사용하여 서버 상태 관리
📝 결론
Ansible을 사용하여 SSH 키 기반 접속 설정을 통해 보안성을 확보하고, HTTPD와 NGINX 웹 서버를 자동으로 설치하여 관리 효율성을 극대화했습니다. Ansible의 다양한 모듈을 활용하여 서버 설치부터 방화벽 설정까지 모든 과정을 자동화하였습니다.
💡 다음 목표:
- 플레이북 작성으로 서버 구축 자동화 최적화
- 더 복잡한 환경에서 멱등성을 활용한 서버 상태 관리
- YAML 파일 관리 최적화로 다양한 환경에 적용
'02. 클라우드 보안 공부 > 실습로그' 카테고리의 다른 글
✅ [실습로그] Ansible을 활용한 FTP와 DNS 서버 자동화 - 설치부터 설정까지 (0) | 2025.05.17 |
---|---|
✅ [실습로그] Ansible로 서버 관리 자동화 - NGINX와 HTTPD 설치 및 관리 (0) | 2025.05.17 |
✅ [실습로그] 무차별 대입 공격 - Hydra와 Medusa 활용법 (0) | 2025.05.17 |
✅ [실습로그] Snort 기반 IDS/IPS 설정 - 침입 탐지와 방지 시스템 구축 (0) | 2025.05.15 |
✅ [실습로그] Ansible 설치와 설정 - 자동화 플랫폼 구축 (0) | 2025.05.15 |