환경 정보
| 항목 | 내용 |
|---|---|
| AWX | 24.6.1 (K3s + AWX Operator 2.19.1) |
| 관리 대상 | Ubuntu 서버 6대 |
| 접속 계정 | root |
| Playbook | ping_test / system_info / apt_update |
1편에서 AWX 설치를 완료한 상태에서 진행합니다.
설치 방법은 [[홈랩 IaC 자동화 #1] Ansible AWX 설치 - K3s + AWX Operator로 Playbook GUI 환경 구축] 참고
전체 흐름
Ubuntu 서버 root SSH 접근 허용
↓
AWX 서버 → 각 서버 SSH 키 복사
↓
AWX UI: 인벤토리 등록 (서버 6대)
↓
AWX UI: 자격증명 등록 (SSH 키)
↓
AWX UI: 프로젝트 등록 (Playbook 파일)
↓
AWX UI: 잡 템플릿 생성 → 실행!STEP 1. Ubuntu 서버 root SSH 접근 허용
Ubuntu는 기본적으로 root SSH 접속이 막혀 있다. 관리 대상 서버 6대에서 각각 실행한다.
# root 비밀번호 설정
sudo passwd root
# SSH 설정 수정
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
# 설정 확인
grep PermitRootLogin /etc/ssh/sshd_config
# 출력: PermitRootLogin yes
# SSH 재시작
sudo systemctl restart sshSTEP 2. AWX 서버에서 SSH 키 생성 및 복사
# SSH 키 생성
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
# 6대 서버에 키 복사 (비밀번호 입력 필요)
ssh-copy-id root@192.168.x.101
ssh-copy-id root@192.168.x.102
ssh-copy-id root@192.168.x.103
ssh-copy-id root@192.168.x.104
ssh-copy-id root@192.168.x.105
ssh-copy-id root@192.168.x.106접속 테스트
for ip in 101 102 103 104 105 106; do
echo -n "192.168.x.$ip : "
ssh -o ConnectTimeout=3 root@192.168.x.$ip hostname 2>/dev/null || echo "실패"
done예상 출력:
192.168.x.101 : server-01
192.168.x.102 : server-02
192.168.x.103 : server-03
192.168.x.104 : server-04
192.168.x.105 : server-05
192.168.x.106 : server-06STEP 3. Playbook 파일 작성
AWX는 K3s 컨테이너 안에서 동작하므로 PVC 실제 경로에 파일을 넣어야 한다.
PVC 경로 확인
find /var/lib/rancher/k3s/storage/ -type d -name "*projects*"/var/lib/rancher/k3s/storage/pvc-xxxxx_awx_awx-projects-claim프로젝트 디렉토리 생성 및 Playbook 작성
PVC_PATH=$(find /var/lib/rancher/k3s/storage/ -type d -name "*awx-projects-claim*")
mkdir -p $PVC_PATH/homelab1. ping_test.yml — 연결 테스트
cat > $PVC_PATH/homelab/ping_test.yml << 'EOF'
---
- name: 연결 테스트
hosts: all
gather_facts: false
tasks:
- name: Ping 테스트
ansible.builtin.ping:
- name: 결과 표시
ansible.builtin.debug:
msg: "{{ inventory_hostname }} ({{ ansible_host }}) 응답 완료"
EOF2. system_info.yml — 시스템 정보 수집
cat > $PVC_PATH/homelab/system_info.yml << 'EOF'
---
- name: 시스템 정보 수집
hosts: all
gather_facts: true
tasks:
- name: OS 정보 출력
ansible.builtin.debug:
msg:
- "호스트명 : {{ ansible_hostname }}"
- "OS : {{ ansible_distribution }} {{ ansible_distribution_version }}"
- "커널 : {{ ansible_kernel }}"
- "CPU : {{ ansible_processor_vcpus }} vCPU"
- "RAM : {{ (ansible_memtotal_mb / 1024) | round(1) }} GB"
- "IP : {{ ansible_default_ipv4.address }}"
EOF3. apt_update.yml — 패키지 업데이트
cat > $PVC_PATH/homelab/apt_update.yml << 'EOF'
---
- name: APT 패키지 업데이트
hosts: all
gather_facts: false
become: true
tasks:
- name: apt 캐시 업데이트
ansible.builtin.apt:
update_cache: yes
cache_valid_time: 3600
- name: 업데이트 결과 출력
ansible.builtin.debug:
msg: "{{ inventory_hostname }} 업데이트 완료"
EOF권한 설정 (AWX uid: 1000)
chown -R 1000:1000 $PVC_PATH/homelab
chmod -R 755 $PVC_PATH/homelab
⚠️ PVC 경로 주의: AWX가 K3s 위에서 동작하므로 호스트의
/var/lib/awx/projects에 파일을 넣어도 소용없다. 반드시 K3s PVC 실제 경로인/var/lib/rancher/k3s/storage/pvc-xxx_awx_awx-projects-claim/안에 넣어야 한다.
STEP 4. AWX UI — 인벤토리 등록
Resources → Inventories → Add → Add inventory| 항목 | 값 |
|---|---|
| Name | homelab-ubuntu |
| Organization | Default |
저장 후 Hosts 탭 → Add 로 6대 추가:
| Name | Variables |
|---|---|
| server-01 | ansible_host: 192.168.x.101 |
| server-02 | ansible_host: 192.168.x.102 |
| server-03 | ansible_host: 192.168.x.103 |
| server-04 | ansible_host: 192.168.x.104 |
| server-05 | ansible_host: 192.168.x.105 |
| server-06 | ansible_host: 192.168.x.106 |

STEP 5. AWX UI — 자격증명 등록
# AWX 서버에서 개인키 복사
cat ~/.ssh/id_rsaResources → Credentials → Add| 항목 | 값 |
|---|---|
| Name | homelab-ssh-key |
| Credential Type | Machine |
| Username | root |
| SSH Private Key | 위에서 복사한 키 전체 붙여넣기 |
STEP 6. AWX UI — 프로젝트 등록
Resources → Projects → Add| 항목 | 값 |
|---|---|
| Name | homelab-project |
| Organization | Default |
| Source Control Type | Manual |
| Playbook Directory | homelab |
드롭다운에
homelab이 안 보이면 PVC 권한 설정 확인 (chown -R 1000:1000)

STEP 7. 잡 템플릿 생성 및 실행
ping-test 템플릿
Resources → Templates → Add → Add job template| 항목 | 값 |
|---|---|
| Name | ping-test |
| Job Type | Run |
| Inventory | homelab-ubuntu |
| Project | homelab-project |
| Playbook | ping_test.yml |
| Credentials | homelab-ssh-key |
Save → ▶️ Launch

실행 결과
PLAY [연결 테스트] ******************************************
TASK [Ping 테스트] ******************************************
ok: [server-01]
ok: [server-02]
ok: [server-03]
ok: [server-04]
ok: [server-05]
ok: [server-06]
PLAY RECAP **************************************************
server-01 : ok=2 changed=0 unreachable=0 failed=0
server-02 : ok=2 changed=0 unreachable=0 failed=0
server-03 : ok=2 changed=0 unreachable=0 failed=0
server-04 : ok=2 changed=0 unreachable=0 failed=0
server-05 : ok=2 changed=0 unreachable=0 failed=0
server-06 : ok=2 changed=0 unreachable=0 failed=0system-info 템플릿
같은 방법으로 system_info.yml 잡 템플릿 생성 후 실행.
PLAY RECAP **************************************************
server-01 : ok=2 changed=0 unreachable=0 failed=0
server-02 : ok=2 changed=0 unreachable=0 failed=0
server-03 : ok=2 changed=0 unreachable=0 failed=0
server-04 : ok=2 changed=0 unreachable=0 failed=0
server-05 : ok=2 changed=0 unreachable=0 failed=0
server-06 : ok=2 changed=0 unreachable=0 failed=0
트러블슈팅
Playbook 디렉토리 드롭다운에 아무것도 안 보임
원인: AWX는 K3s PVC 경로를 바라보는데, 호스트의 /var/lib/awx/projects에 파일을 넣으면 인식 못 함
해결: K3s PVC 실제 경로에 파일 생성
# 실제 PVC 경로 확인
find /var/lib/rancher/k3s/storage/ -type d -name "*awx-projects-claim*"
# 해당 경로에 파일 생성 후 권한 설정
chown -R 1000:1000 <PVC 경로>/homelab
chmod -R 755 <PVC 경로>/homelabroot SSH 접속 거부
원인: Ubuntu 기본 설정에서 root SSH 접속 비활성화
해결: 각 Ubuntu 서버에서 PermitRootLogin yes 설정 후 SSH 재시작
마무리
AWX에서 Playbook을 실행해보니 확실히 편하다. 터미널에서 ansible-playbook -i inventory ping_test.yml 치는 것보다 클릭 몇 번으로 6대 서버에 동시 실행되는 게 훨씬 직관적이다.
특히 실행 결과가 UI에서 실시간으로 스크롤되며 보이는 게 좋았다. 어느 서버가 성공/실패인지 한눈에 파악이 된다.
삽질 포인트는 PVC 경로 문제였다. K3s 위에서 AWX가 돌다 보니 호스트 경로와 컨테이너 내부 경로가 다르다는 걸 처음에 몰라서 헤맸다. 이 부분만 알면 나머지는 어렵지 않다.
다음 편 예고: [홈랩 IaC 자동화 #3] AWX 스케줄러 — 매일 자동으로 패키지 업데이트 실행하기
참고 링크
👉 #1화 — Docker Compose로 홈랩 자동화 플랫폼 구축하기
👉 #3화 — AWX 스케줄러 + 텔레그램 알림 - 매일 자동 패키지 업데이트
👉 #4화 — Terraform으로 Proxmox VM 자동 생성하기
'IT > HomeLabs' 카테고리의 다른 글
| [홈랩 IaC 자동화 #5] Terraform + Ansible 연동 - VM 생성부터 초기 설정 자동화까지 (0) | 2026.03.28 |
|---|---|
| [홈랩 IaC 자동화 #4] Terraform으로 Proxmox VM 자동 생성하기 (0) | 2026.03.26 |
| [홈랩 IaC 자동화 #3] AWX 스케줄러 + 텔레그램 알림 - 매일 자동 패키지 업데이트 (0) | 2026.03.25 |
| [홈랩 IaC 자동화 #1] Ansible AWX 설치 - K3s + AWX Operator로 Playbook GUI 환경 구축 (0) | 2026.03.23 |
| [HomeLabs] Ansible AWX 설치 방법 - Docker Compose로 홈랩 자동화 플랫폼 구축하기 (0) | 2026.03.23 |
| [홈랩 K8s 자동화 #1] Proxmox + Terraform으로 쿠버네티스 실습 VM 한방에 만들기 (0) | 2026.03.21 |