소개
이 실습에서는 강력한 오픈 소스 자동화 도구인 Ansible을 처음 사용해 봅니다.
서버 100 대를 관리해야 한다고 생각해 보세요. 각 서버에 로그인하여 소프트웨어를 설치하거나 설정을 변경하는 작업은 번거롭고 실수하기 쉽습니다. Ansible 을 사용하면 대상 서버에 에이전트를 설치하지 않고도 하나의 제어 노드에서 관리 노드라고 부르는 여러 서버를 관리할 수 있습니다.
에이전트가 필요 없는 설계는 Ansible 이 운영 팀에서 널리 사용되는 주요 이유입니다. 각 호스트에서 유지 관리해야 하는 추가 소프트웨어가 줄어들고, 관리자가 이미 신뢰하는 도구, 특히 SSH 를 기반으로 동작하기 때문입니다.
Ansible 은 다음과 같이 작동합니다.
- SSH(원격 로그인에 사용하는 도구) 를 사용하여 서버에 연결합니다.
- 간단한 텍스트 파일 (YAML 로 작성) 에서 지침을 읽습니다.
- 작업을 수행할 작은 프로그램인 모듈을 서버로 전송합니다.
이 에이전트 없는 모델은 Ansible 이 널리 사용되는 또 다른 이유입니다. 특히 SSH 와 텍스트 기반 구성처럼 Linux 관리자가 이미 알고 있는 도구를 활용합니다.
이 실습에서는 관리하는 역할과 관리받는 역할을 모두 수행합니다. 실습 환경에 Ansible 을 설치하고, Ansible 이 자기 자신 (localhost) 을 관리하도록 구성합니다. 기본 기능을 안전하게 익히기에 좋은 방법입니다.
다음 방법을 배웁니다.
- 패키지 관리자를 사용하여 Ansible 을 설치합니다.
- Ansible 이 비밀번호 없이 로그인할 수 있도록 SSH 키를 설정합니다.
- 관리할 컴퓨터를 나열하는 인벤토리 파일을 만듭니다.
ping모듈을 사용하여 연결을 테스트합니다.
Ansible 설치
첫 번째 단계는 컴퓨터에 Ansible 을 설치하는 것입니다. Ubuntu 를 사용하므로 Linux 명령줄 도구를 위한 "앱 스토어"와 같은 apt 패키지 관리자를 사용할 수 있습니다.
설정 스크립트에서 이미 업데이트를 실행했지만, 패키지 목록이 최신 상태인지 확인하는 것이 좋습니다.
sudo apt update
이제 다음 명령을 실행하여 Ansible 을 설치합니다.
sudo apt install ansible -y
명령 이해하기:
sudo: 관리자 (root) 권한으로 명령을 실행합니다.apt install: 패키지 관리자에게 프로그램을 설치하도록 지시합니다.ansible: 설치할 패키지 이름입니다.-y: "계속하시겠습니까?"와 같은 확인 메시지에 자동으로 "yes"라고 응답합니다.
설치가 완료되면 버전을 확인하여 설치 여부를 검증합니다.
ansible --version
ansible [core 2.x.x]로 시작하는 출력이 표시되어야 합니다. 이 출력은 Ansible 이 설치되어 사용할 준비가 되었음을 의미합니다.
SSH 키 생성
Ansible 은 서버와 통신할 때 SSH(Secure Shell) 를 사용합니다. SSH 는 Linux 서버에 원격으로 접속할 때 사용하는 표준 방법입니다.
이 때문에 인벤토리가 중요합니다. Ansible 은 어떤 머신이 존재하는지, 어떻게 그룹화되어 있는지, 어떻게 접근할 수 있는지를 명확히 알아야 합니다. 인벤토리는 자동화 시스템의 주소록과 같은 역할을 합니다.
기본적으로 SSH 는 비밀번호를 요구합니다. 하지만 Ansible 과 같은 자동화 도구가 서버에 연결할 때마다 비밀번호를 입력할 수는 없습니다. 대신 SSH 키를 사용합니다.
SSH 키를 자물쇠와 열쇠라고 생각해 보세요.
- 공개 키(자물쇠): 접근하려는 서버에 저장합니다.
- 개인 키(열쇠): 제어 컴퓨터에 안전하게 보관합니다.
Ansible 이 연결하면 서버는 사용자의 "열쇠"가 서버의 "자물쇠"와 일치하는지 확인합니다. 일치하면 비밀번호 없이 로그인할 수 있습니다.
다음 명령을 실행하여 키 쌍을 생성합니다.
ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa
명령 이해하기:
ssh-keygen: 키를 생성하는 도구입니다.-t rsa: RSA 유형의 키를 생성합니다 (표준 방식).-b 2048: 길이가 2048 비트인 키를 생성합니다 (충분히 안전한 수준).-N "": 빈 암호 구문을 설정합니다. 이는 "이 키를 사용할 때 비밀번호를 묻지 마세요"라는 의미이며, Ansible 이 완전히 자동으로 실행되도록 합니다.-f ~/.ssh/id_rsa: 표준 위치에 키를 저장합니다.
파일이 생성되었는지 확인합니다.
ls -l ~/.ssh/
id_rsa(비밀 개인 키) 와 id_rsa.pub(공개 키) 가 표시되어야 합니다.
키 인증 설정
키를 생성했으므로 이제 관리할 서버에 공개 키를 저장해야 합니다. 이 실습에서는 현재 사용 중인 동일한 컴퓨터인 localhost를 관리합니다.
이 단계에서는 인증과 자동화 로직이 분리되어 있음을 확인합니다. Ansible 이 무엇이든 자동화하기 전에 대상에 안정적으로 비대화형 인증을 수행할 수 있어야 합니다.
id_rsa.pub의 내용을 .ssh 디렉터리에 있는 authorized_keys 파일에 추가해야 합니다.
일반적으로는 ssh-copy-id와 같은 명령을 사용합니다. 그러나 이 명령은 먼저 비밀번호를 입력하여 사용자가 본인인지 확인하는 경우가 많습니다. 이 실습 환경에는 비밀번호가 없으므로 키를 직접 복사합니다.
다음 명령을 실행하여 공개 키를 인증된 키 목록에 추가합니다.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
명령 이해하기:
cat ...: 공개 키를 읽습니다.>>: 출력을 대상 파일의 끝에 추가합니다. 기존 파일을 덮어쓰지 않습니다..../authorized_keys: SSH 가 로그인 권한이 있는 사용자를 확인하는 파일입니다.
이제 SSH 가 파일을 신뢰하도록 올바른 권한을 설정합니다.
chmod 600 ~/.ssh/authorized_keys
이제 테스트합니다. 자신의 컴퓨터에 SSH 로 접속해 보세요.
ssh localhost "echo Hello from SSH"
"Are you sure you want to continue connecting?"라는 메시지가 표시되면 yes를 입력하고 Enter 키를 누릅니다.
비밀번호를 묻지 않고 "Hello from SSH"가 즉시 출력되어야 합니다. 이는 Ansible 도 비밀번호 없이 연결할 수 있음을 의미합니다.
인벤토리 파일 생성
Ansible 은 관리할 서버 목록을 필요로 합니다. 이 목록을 인벤토리라고 합니다.
인벤토리는 간단한 텍스트 파일일 수 있습니다. 프로젝트 디렉터리와 hosts.ini라는 인벤토리 파일을 생성합니다.
hosts.ini라는 빈 파일을 생성합니다.
touch hosts.ini
현재 Ansible 에는 서버가 등록되어 있지 않습니다. 다음 단계에서 서버를 추가합니다.
인벤토리에 호스트 추가
이제 hosts.ini 파일을 편집하여 서버를 추가합니다. Ansible 인벤토리는 다음과 같은 INI 형식을 사용하는 경우가 많습니다.
[group_name]
server_address
서버를 [webservers] 또는 [databases]와 같이 그룹으로 묶으면 같은 유형의 모든 서버에서 한 번에 명령을 실행할 수 있습니다.
localhost를 [webservers] 그룹에 추가합니다. 다음 명령을 실행하여 파일에 내용을 작성합니다.
echo -e "[webservers]\nlocalhost" > hosts.ini
명령 이해하기:
echo -e: 텍스트를 출력하며\n(줄 바꿈) 과 같은 특수 문자를 해석합니다."[webservers]\nlocalhost": 작성할 텍스트입니다. 첫 번째 줄에[webservers], 두 번째 줄에localhost를 배치합니다.> hosts.ini: 이 내용으로 파일을 덮어씁니다.
파일의 내용을 확인할 수 있습니다.
cat hosts.ini
다음과 정확히 같아야 합니다.
[webservers]
localhost
연결 테스트
이제 실제로 확인해 보겠습니다. 인벤토리에 있는 모든 서버에 Ansible 이 연결할 수 있는지, 서버가 응답하는지 확인합니다.
일회성 작업을 실행하는 ansible 명령과 ping 모듈을 사용합니다.
다음 명령을 실행합니다.
ansible all -m ping -i hosts.ini
명령 이해하기:
all: 인벤토리의 모든 호스트를 대상으로 지정합니다.-m ping: Ansible 에ping이라는 모듈을 사용하도록 지시합니다.- 참고: 네트워크의
ping명령과는 다릅니다. Ansible 의 ping 은 실제로 서버에 로그인하여 Python 을 사용할 수 있는지 확인한 뒤"pong"을 반환합니다. 이를 통해 구성이 정상적으로 작동하는지 확인할 수 있습니다.
- 참고: 네트워크의
-i hosts.ini: 시스템 기본 인벤토리 대신 방금 생성한 인벤토리 파일을 사용하도록 Ansible 에 지시합니다.
다음과 같은 녹색 "SUCCESS" 메시지가 표시되어야 합니다.
localhost | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
"ping": "pong"이 표시되면 축하합니다. Ansible 이 서버를 관리하도록 성공적으로 구성한 것입니다.
요약
이 실습에서는 Ansible 자동화를 위한 기반을 구축했습니다. 다음 내용을 배웠습니다.
- 설치: 시스템에서 Ansible 을 사용할 수 있도록 준비했습니다.
- SSH 키 설정: Ansible 이 비밀번호 없이 안전하게 로그인할 수 있도록 "키"를 생성했습니다.
- 인벤토리: 관리할 서버 목록 (
hosts.ini) 을 만들었습니다. - 연결 확인:
ping모듈을 사용하여 모든 구성이 정상적으로 작동하는지 확인했습니다.
설치, 접근, 인벤토리 작성, 테스트는 서버 한 대를 관리하든 1,000 대를 관리하든 모든 Ansible 프로젝트에서 수행하는 첫 단계입니다.


