02. 클라우드 보안 공부/실습로그

✅ [실습로그] Ansible로 SSH 키 기반 서버 관리 자동화 - HTTPD와 NGINX 배포

taegi- 2025. 5. 17. 19:05

🌐 Ansible활용한 서버 관리 자동화

💡 실습 목표

  • Ansible사용하여 서버 관리 자동화를 구현한다.
  • SSH 기반 접속 설정을 통해 비밀번호 없이 작업을 수행한다.
  • HTTPDNGINX 서버를 자동 설치하고, 방화벽을 설정한다.
  • 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"

실습 결과

  1. SSH 기반으로 비밀번호 없이 Ansible 작업 수행
  2. HTTPDNGINX 서버 설치 구동
  3. index.html 파일 작성 전송하여 서버 테스트 완료
  4. 방화벽 설정을 통해 HTTP 포트 개방
  5. Ansible 기본 명령어를 사용하여 서버 상태 관리

📝 결론

Ansible사용하여 SSH 기반 접속 설정을 통해 보안성을 확보하고, HTTPDNGINX 서버를 자동으로 설치하여 관리 효율성을 극대화했습니다. Ansible다양한 모듈을 활용하여 서버 설치부터 방화벽 설정까지 모든 과정을 자동화하였습니다.

💡 다음 목표:

  1. 플레이북 작성으로 서버 구축 자동화 최적화
  2. 복잡한 환경에서 멱등성을 활용한 서버 상태 관리
  3. YAML 파일 관리 최적화로 다양한 환경에 적용