본문 바로가기
DevOps

[Devops] Ansible CLI 도구 설치 및 실습 매뉴얼

by Yoon_estar 2025. 1. 22.
728x90

소개

이 매뉴얼은 온프레미스 Ubuntu 24.04 서버에서 Ansible을 설정하고 사용자 생성, SSH 구성 수정, 타겟 호스트 연결 등 기본 작업을 수행하는 방법을 안내합니다. 아래 단계를 따라 Ansible 환경을 구축하세요.

 

1. Ansible 설치

# pip3 install setuptools wheel
# pip3 install --upgrade pip
# pip3 install ansible

 

2. 주요 개념

Control Node

  • Ansible CLI를 실행할 머신

Managed Node

  • Ansible로 관리를 진행할 타겟 호스트

Inventory

  • 관리할 호스트 목록(개별, 그룹, 중첩된 그룹)
  • INI, YAML 형식 사용 가능
  • 기본 인벤토리 파일 경로: /etc/ansible/hosts
  • 동적 인벤토리:
    • 클라우드 가상 머신의 메타데이터를 기반으로 인벤토리 구성 가능

Playbooks

  • 실행할 작업 목록을 관리
  • 실행할 작업은 **플레이(Play)**로 구성

Modules

  • Ansible에서 사용하는 명령어 집합
  • 제공된 모듈 외에도 커스텀 스크립트나 모듈 생성 가능

Roles

  • 재사용 가능한 형태의 Ansible 자원
  • 태스크, 핸들러, 변수, 플러그인, 템플릿, 파일 구성
  • 프로젝트 크기가 커질 경우 필수 사용
  • 디렉터리 용도:
    • tasks: 실행할 태스크 목록 관리
    • templates: Jinja2 템플릿 파일 관리
    • defaults: 변수의 기본 값 관리
    • vars: 롤에 사용되는 변수 관리, 기본 변수 재정의 가능
    • files: 리모트 서버에 배포할 데이터 파일
  • Roles는 Playbook을 통해 호출되며, 각 롤의 하위 디렉토리 main.yml이 실행됨

 

3. 작업 디렉토리 생성

# mkdir ansible_demo
# cd ansible_demo

 

4. SSH 키 생성

  • ansible_key: 개인 키
  • ansible_key.pub: 공개 키
# ssh-keygen -C "ansible ssh key" -q -f ./ansible_key -t rsa -b 2048 -N ""

 

5. 클라우드 초기화 파일 설정(Cloud-Config 템플릿)

# cloud-config

------------------------------------------
cloud_final_modules:
- [users-groups, once]
users:
  - name: ansible
    groups: [ sudo, adm ]
    sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
    shell: /bin/bash
    ssh_authorized_keys: 
    - PublicKeypair

 

6. 인벤토리 파일 구성

  • 파일 이름은 반드시 aws_ec2.yaml로 끝나야 합니다.
# vim target_aws_ec2.yaml

------------------------------------------
plugin: aws_ec2
filters:
  instance-state-name: running
keyed_groups:
  - prefix: tag
    key: tags

 

7. Ansible 설정 파일 구성

# vim ansible.cfg

------------------------------------------
[defaults]
inventory = /home/ubuntu/ansible_demo/target_aws_ec2.yaml
remote_user = ansible
private_key_file = /home/ubuntu/ansible_demo/ansible_key
host_key_checking = False

 

8. 타겟 호스트 연결 확인

# ansible-inventory --graph
# ansible all -m ping

 

9. 플레이북 작성 및 실행

# vim user_mgmt.yaml

------------------------------------------
- name: user module demo
  hosts: tag_Name_ansible_demo
  become: true
  tasks:
    - name: Create a new user 
      ansible.builtin.user:
        name: fast
        password: "{{ '1234qwer' | password_hash('sha512') }}"
        groups:
          - adm
          - sudo
        state: "present"
        shell: "/bin/bash"
        system: false
        create_home: true
        home: "/home/fast"
        comment: "Ansible demo user"

    - name: Enable SSH password authentication
      ansible.builtin.lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^PasswordAuthentication'
        line: PasswordAuthentication yes

    - name: Restart sshd service
      ansible.builtin.service:
        name: sshd
        state: restarted

 

# ansible-playbook user_mgmt.yaml

 

10. SSH 연결 테스트

# ssh root@<target_host_ip>