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
  • 루트 권한

우리가 할 일은?

  1. Ansible 제어 머신 설정
  2. 사용자 및 SSH 키 정의
  3. 인벤토리 파일 생성
  4. Ansible 플레이북 생성
  5. 플레이북을 사용하여 서버 배포
  6. 테스트

1단계 - Ansible 제어 머신 설정

이 튜토리얼에서는 Ubuntu 16.04 서버를 Ansible ‘제어 머신’ 및 ansible 호스트로 사용할 것입니다. 우리가 해야 할 첫 번째 단계는 ‘제어 머신’을 설정하는 것입니다.

다음 명령을 실행하여 ansible ‘제어 머신’에 python과 ansible을 설치합니다.

sudo apt install python ansible -y

Ansible 제어 머신 설정

설치가 완료되면 새 시스템 사용자를 추가합니다.

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’ 파일에 저장됩니다.

Ansible 플레이북 생성

참고:

서버 노드가 많은 경우 호스트 목록을 저장한 다음 아래와 같이 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 테스트

이제 Ansible을 사용하여 ‘ansi01’ 및 ‘ansi02’ 서버를 관리할 수 있으며, ‘provision’ 사용자가 Ansible의 기본 사용자로 설정됩니다.

서버에 대한 연결 테스트

ssh 10.0.15.21  
ssh 10.0.15.22

그리고 기본 키 ‘.ssh/id_rsa’ 파일을 사용하여 ‘provision’ 사용자로 각 서버에 연결됩니다.

서버 연결 테스트

다른 테스트

Ansible을 사용하여 새 사용자 및 ssh 키를 배포하는 작업이 성공적으로 완료되었습니다.

참고

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.