Ansible 설정 · 4 min read · Nov 16, 2025
Ansible를 사용하여 Ubuntu 18.04에서 새 사용자 및 SSH 키 인증 설정하기
Ansible은 소프트웨어 애플리케이션 배포, 클라우드 프로비저닝 및 구성 관리를 자동화하는 간단한 자동화 도구입니다. 이는 ‘제어 머신’이라고 불리는 단일 장소에서 많은 서버 노드를 관리하고 제어하는 데 도움을 주는 서버 오케스트레이션 도구입니다. Ansible은 2012년 Michael DeHaan에 의해 만들어졌으며 Python과 Powershell로 작성되었습니다.
이 튜토리얼에서는 새 사용자를 배포하고 자동화 도구 Ansible을 사용하여 SSH 키 기반 인증을 활성화하는 방법을 배웁니다. 또한 Ansible ‘제어 머신’을 구성하는 방법과 간단한 ansible 플레이북을 작성하는 방법도 배웁니다.
전제 조건
- 2개 이상의 Ubuntu 18.04 서버 - 10.0.15.10 control-machine
- 10.0.15.21 ansi01
- 10.0.15.22 ansi02
- 루트 권한
우리가 할 일은?
- Ansible 제어 머신 설정
- 사용자 및 SSH 키 정의
- 인벤토리 파일 생성
- Ansible 플레이북 생성
- 플레이북을 사용하여 서버 배포
- 테스트
1단계 - Ansible 제어 머신 설정
이 튜토리얼에서는 Ubuntu 16.04 서버를 Ansible ‘제어 머신’ 및 ansible 호스트로 사용할 것입니다. 우리가 해야 할 첫 번째 단계는 ‘제어 머신’을 설정하는 것입니다.
다음 명령을 실행하여 ansible ‘제어 머신’에 python과 ansible을 설치합니다.
sudo apt install python ansible -y
설치가 완료되면 새 시스템 사용자를 추가합니다.
Ansible을 사용하여 서버 프로비저닝을 수행하기 위해 ‘provision’이라는 새 사용자를 추가합니다.
새 사용자 ‘provision’을 추가하고 사용자에게 비밀번호를 설정합니다.
useradd -m -s /bin/bash provision
passwd provision이제 아래 명령을 사용하여 ‘/etc/sudoers.d/‘ 아래에 새 구성 파일을 생성하여 비밀번호 없이 sudo를 사용할 수 있도록 ‘provision’ 사용자를 추가합니다.
echo -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision새 사용자가 생성되었으며 이제 비밀번호 없이 sudo를 사용할 수 있습니다.

2단계 - 사용자 및 SSH 키 정의
이 단계에서는 ansible 호스트의 사용자를 정의합니다. 이 사용자는 ansible에 의해 자동으로 생성되므로 사용자 이름, 비밀번호 및 ssh 공개 키만 정의하면 됩니다.
각 서버(‘ansi01’ 및 ‘ansi02’)에 대해 ‘provision’이라는 새 사용자를 비밀번호 ‘secret01’로 생성합니다. 그리고 mkpasswd 명령을 사용하여 ‘secret01’ 비밀번호를 암호화해야 합니다.
아래 명령을 사용하여 ‘secret01’ 비밀번호를 암호화합니다.
mkpasswd --method=SHA-512
TYPE THE PASSWORD 'secret01'참고:
시스템에 ‘whois’ 패키지가 설치되어 있는지 확인하거나 아래 명령을 사용하여 설치할 수 있습니다.
sudo apt install whois -y그러면 SHA-512로 암호화된 비밀번호를 얻을 수 있습니다.
다음으로 새 ssh 키를 생성합니다.
‘provision’ 사용자로 로그인하고 ssh-keygen 명령을 사용하여 ssh 키를 생성합니다.
su - provision
ssh-keygen -t rsa이제 사용자와 비밀번호가 정의되었고 ssh 키가 생성되었습니다(‘.ssh’ 디렉토리에 위치).

3단계 - 새 인벤토리 생성
이 단계에서는 모든 서버 호스트에 대한 인벤토리 파일을 정의합니다.
‘provision’ 사용자로 로그인하고 프로젝트를 위한 새 디렉토리를 생성합니다.
su - provision
mkdir -p ansible01/‘ansible01’ 디렉토리로 이동하여 vim을 사용하여 새 인벤토리 파일 ‘inventory.ini’를 생성합니다.
cd ansible01/
vim inventory.ini다음 구성을 붙여넣습니다.
[webserver]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22저장하고 종료합니다.
이제 새 Ansible 구성 파일 ‘ansible.cfg’를 생성합니다.
vim ansible.cfg다음 구성을 붙여넣습니다.
[defaults]
inventory = /home/provision/ansible01/inventory.ini저장하고 종료합니다.

Ansible 인벤토리 파일이 생성되었으며, 우리의 Ansible 스크립트는 ‘provision’ 사용자 아래 ‘ansible01’ 디렉토리에 위치하게 됩니다.
4단계 - Ansible 플레이북 생성
Ansible 플레이북은 단일 또는 그룹의 서버 호스트에서 실행할 지침 세트입니다. 이는 Ansible 프로비저닝을 나타내며, 자동화는 작업으로 정의되고 패키지 설치, 파일 편집과 같은 모든 작업은 Ansible 모듈에 의해 수행됩니다.
이 단계에서는 새 사용자를 배포하고, ssh 키를 배포하고, ssh 서비스를 구성하는 새로운 Ansible 플레이북을 생성합니다.
새 Ansible 플레이북을 생성하기 전에 ssh-keyscan 명령을 사용하여 모든 서버의 지문을 스캔합니다.
ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts이 서버의 지문은 ‘.ssh/known_hosts’ 파일에 저장됩니다.

참고:
서버 노드가 많은 경우 호스트 목록을 저장한 다음 아래와 같이 bash 스크립트를 사용하여 ssh 키 지문을 수동으로 스캔할 수 있습니다.
for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
done다음으로 vim을 사용하여 ‘deploy-ssh.yml’이라는 Ansible 플레이북을 생성합니다.
vim deploy-ssh.yml다음 Ansible 플레이북을 붙여넣습니다.
---
- hosts: all
vars:
- provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'
gather_facts: no
remote_user: root
tasks:
- name: Add a new user named provision
user:
name=provision
password={{ provision_password }}
- name: Add provision user to the sudoers
copy:
dest: "/etc/sudoers.d/provision"
content: "provision ALL=(ALL) NOPASSWD: ALL"
- name: Deploy SSH Key
authorized_key: user=provision
key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
state=present
- name: Disable Password Authentication
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PasswordAuthentication'
line="PasswordAuthentication no"
state=present
backup=yes
notify:
- restart ssh
- name: Disable Root Login
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PermitRootLogin'
line="PermitRootLogin no"
state=present
backup=yes
notify:
- restart ssh
handlers:
- name: restart ssh
service:
name=sshd
state=restarted저장하고 종료합니다.
플레이북 스크립트에서:
- ‘deploy-ssh.yml’ 플레이북 스크립트를 생성하여 ‘inventory.ini’ 파일에 정의된 모든 서버에 적용합니다.
- 새 사용자를 위한 암호화된 비밀번호를 포함하는 Ansible 변수를 ‘provision_password’로 생성합니다.
- Ansible 사실을 ‘no’로 설정합니다.
- 작업 자동화를 수행할 원격 사용자로 ‘root’ 사용자를 정의합니다.
- 새 사용자 추가, 사용자를 sudoers에 추가 및 ssh 키 업로드를 위한 새 작업을 생성합니다.
- ssh 서비스 구성, 루트 로그인 비활성화 및 비밀번호 인증 비활성화를 위한 새 작업을 생성합니다. ssh 구성 작업은 ‘restart ssh’ 핸들러를 트리거합니다.
- ssh 서비스를 재시작하기 위한 핸들러를 생성합니다.
5단계 - 플레이북 실행
‘provision’ 사용자로 로그인하고 ‘ansible01’ 디렉토리로 이동합니다.
su - provision
cd ansible01/이제 아래와 같이 명령을 사용하여 ‘deploy-ssh.yml’ 플레이북을 실행합니다.
ansible-playbook deploy-ssh.yml --ask-pass루트 비밀번호를 입력하면 아래와 같은 결과를 얻을 수 있습니다.

새 사용자 및 ssh 키 배포를 위한 모든 작업이 성공적으로 완료되었습니다.
6단계 - 테스트
ansible 명령을 사용하여 테스트합니다.
ansible webserver -m ping
ansible webserver -m shell -a id이제 아래와 같은 녹색 메시지를 얻을 수 있습니다.

이제 Ansible을 사용하여 ‘ansi01’ 및 ‘ansi02’ 서버를 관리할 수 있으며, ‘provision’ 사용자가 Ansible의 기본 사용자로 설정됩니다.
서버에 대한 연결 테스트
ssh 10.0.15.21
ssh 10.0.15.22그리고 기본 키 ‘.ssh/id_rsa’ 파일을 사용하여 ‘provision’ 사용자로 각 서버에 연결됩니다.


Ansible을 사용하여 새 사용자 및 ssh 키를 배포하는 작업이 성공적으로 완료되었습니다.
참고
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.