Ubuntu 18.04에서 Ansible 자동화 초기 서버 설치 방법

Ubuntu 18.04에서 Ansible 자동화 초기 서버 설치 방법

2022-06-01 last update

20 minutes reading Initial Server Setup Ubuntu 18.04 Ansible Automated Setups

소개


현대 응용 프로그램 환경의 일회성 때문에 서버 자동화는 현재 시스템 관리에서 매우 중요한 역할을 한다.Configuration management 예를 들어 Ansible 같은 도구는 일반적으로 새 서버를 위한 표준 프로그램을 구축하여 서버 자동 설정 과정을 간소화하고 수동 설정과 관련된 사람의 오류를 줄이는 데 사용된다.
Ansible는 노드에 특별한 소프트웨어를 설치할 필요가 없는 간단한 아키텍처를 제공합니다.또한 자동화된 스크립트를 작성하는 데 도움이 되는 강력한 기능과 내장 모듈을 제공합니다.
이 가이드에서는 Ansible 자동화 Initial Server Setup Guide for Ubuntu 18.04 servers 에 포함된 단계를 사용하는 방법에 대해 설명합니다.

선결 조건


이 설명서에서 설명한 시나리오의 자동 설정을 수행하려면 다음이 필요합니다.
  • Ansible 제어 노드: Ansible가 설치되어 SSH 키를 사용하여 Ansible 호스트에 연결하도록 구성된 Ubuntu 18.04 컴퓨터.제어 노드에 sudo 권한이 있는 일반 사용자가 있는지 확인하고 방화벽을 사용합니다. Initial Server Setup 안내서에 설명된 바와 같습니다.Ansible을 설정하려면 설명서How to Install and Configure Ansible on Ubuntu 18.04를 따르십시오.
  • 하나 이상의 Ansible 호스트: 하나 이상의 원격 Ubuntu 18.04 서버.
  • 계속하기 전에 Ansible 제어 노드가 연결되어 Ansible 호스트에서 명령을 실행할 수 있는지 확인해야 합니다.연결 테스트에 대해서는 How to Install and Configure Ansible on Ubuntu 18.04 단계 3을 확인하십시오.

    이 대본은 무엇을 하는 것입니까?


    이 Ansible 매뉴얼은 수동 실행 Ubuntu 18.04 initial server setup guidesetting up SSH keys on Ubuntu 18.04 매뉴얼에 설명된 프로세스를 대체하는 방법을 제공합니다.
    이 playbook을 실행하면 Ansible 호스트에서 다음을 수행합니다.
  • 설치aptitude, Ansible는 apt 패키지 관리자의 대체품으로 우선 선택됩니다.
  • 관리 그룹 휠을 만들고 암호가 없는 sudo로 설정합니다.
  • 새 sudo 사용자를 만듭니다.
  • 로컬 SSH 공개 키를 복사하여 원격 호스트에서 사용자를 새로 관리하는 authorized_keys 파일에 포함합니다.
  • 루트 사용자의 암호 기반 인증을 해제합니다.
  • 시스템 패키지를 설치합니다.
  • UFW 방화벽을 SSH 연결만 허용하고 다른 요청은 거부되도록 구성합니다.
  • 플레이북이 실행되면 서버에 로그인할 수 있는 새로운 사용자가 있습니다.

    어떻게 이 시나리오를 사용합니까


    첫 번째 작업은 do-community/ansible-playbooks 저장소에서 초기 서버 설정 시나리오와 의존 항목을 가져오는 것입니다.이 저장소를 Ansible control 노드 내의 로컬 폴더로 복제합니다.
    저장소를 처음 사용하는 경우do-community/ansible-playbooks 먼저 다음 명령을 사용하여 컨트롤러 노드에 저장소를 복제해야 합니다.
    1. cd ~
    2. git clone https://github.com/do-community/ansible-playbooks.git
    3. cd ansible-playbooks
    이전에 다른 지침을 따르면서 이 저장소를 복제한 경우 기존 ansible-playbooks 복제본에 액세스하여 git pull 명령을 실행하여 컨텐트가 업데이트되었는지 확인합니다.
    1. cd ~/ansible-playbooks
    2. git pull
    관심 있는 파일은 setup_ubuntu1804 폴더에 있으며 이 폴더에는 다음과 같은 구조가 있습니다.
    setup_ubuntu1804
    ├── playbook.yml
    └── vars
        └── default.yml
    
    다음은 각 파일의 내용입니다.
  • vars/default.yml: 시나리오 설정을 사용자 정의하는 변수 파일입니다.
  • playbook.yml: 원격 서버에서 수행할 작업을 포함하는 시나리오 파일입니다.
  • 우리는 그 값을 사용자 정의하기 위해 대본의 변수 파일을 편집할 것이다.setup_ubuntu1804 디렉토리에 액세스하고 선택한 명령줄 편집기를 사용하여 파일을 엽니다.
    1. cd setup_ubuntu1804
    2. nano vars/default.yml
    이 파일에는 주의해야 할 변수가 있습니다.
    변수/기본값.yml 회사
    ---
    create_user: sammy
    copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"
    sys_packages: [ 'curl', 'vim', 'git', 'ufw']
    
    다음 목록은 이러한 변수 중 하나와 변경할 수 있는 방법에 대해 간략하게 설명합니다.
  • vars/default.yml: 생성될 sudo 사용자의 이름입니다.이 예에서, 우리는sammy를 사용할 것이다.
  • create_user: 로컬 SSH 공개 키 파일의 경로입니다. 이 파일은 원격 서버로 복사하여 copy_local_key 새 sudo 사용자에게 추가해야 합니다.기본값은 authorized_key 플러그인을 사용하여 Ansible control 노드에 있는 현재 시스템 사용자의 기본 키의 전체 경로를 가져옵니다.
  • lookup: 초기 서버 설치의 일부분으로 호스트에 설치하고자 하는 패키지 목록을 포함하는 그룹입니다.이 예에서 우리는 가방sys_packages, curl, vim, gitufw에 확실히 보존할 것이다.
  • vars/default.yml의 변수를 업데이트한 후 파일을 저장하고 닫습니다.nano를 사용하는 경우 CTRL + X, Y 을 누른 다음 ENTER 을 누릅니다.
    이제 이 시나리오를 하나 이상의 서버에서 실행할 수 있습니다.기본적으로 대부분의 시나리오는 목록의 모든 서버에서 실행되도록 설정되어 있습니다.우리는 일부 서버나 한 대의 서버만 대본의 영향을 받는 것을 확보하기 위해 -l 로고를 사용할 수 있다.원격 서버에서 원격 호스트의playbook 명령을 연결하고 실행하는 데 사용할 사용자를 지정합니다.-u에서만 시나리오를 실행하려면 server1로 연결하려면 다음 명령을 사용할 수 있습니다.
    1. ansible-playbook playbook.yml -l server1 -u root
    다음과 유사한 출력을 얻을 수 있습니다.
    Output
    PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [server1] TASK [Install Prerequisites] *********************************************************************************************************** changed: [server1] TASK [Make sure we have a 'wheel' group] *********************************************************************************************** changed: [server1] TASK [Allow 'wheel' group to have passwordless sudo] *********************************************************************************** changed: [server1] TASK [Create a new regular user with sudo privileges] ********************************************************************************** changed: [server1] TASK [Set authorized key for remote user] ********************************************************************************************** changed: [server1] TASK [Disable password authentication for root] **************************************************************************************** changed: [server1] TASK [Update apt] ********************************************************************************************************************** changed: [server1] TASK [Install required system packages] ************************************************************************************************ ok: [server1] TASK [UFW - Allow SSH connections] ***************************************************************************************************** changed: [server1] TASK [UFW - Deny all other incoming traffic by default] ******************************************************************************** changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=11 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
    참고: Ansible 시나리오를 실행하는 방법에 대한 자세한 내용은 DellAnsible Cheat Sheet Guide을 참조하십시오.
    playbook 실행이 완료되면 다음 방법으로 서버에 로그인할 수 있습니다.
    1. ssh sammy@server_host_or_IP
    root 변수로 정의된 사용자를 sammy로 교체하고 서버의 호스트 이름이나 IP 주소로 서버\uhost\u 또는 IP를 교체하는 것을 기억하십시오.create_user 변수를 현재 시스템 사용자가 아닌 사용자 정의 SSH 키를 가리키는 것으로 변경한 경우 새 사용자가 SSH를 통해 연결할 때 해당 개인 키의 위치를 지정하는 추가 매개 변수가 필요합니다.
    1. ssh sammy@server_host_or_IP -i ~/.ssh/ansible_controller_key
    서버에 로그인하면 UFW 방화벽의 활성 규칙을 확인하여 올바른 구성을 확인할 수 있습니다.
    1. sudo ufw status
    다음과 같은 출력을 얻어야 합니다.
    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
    UFW 방화벽이 성공적으로 활성화되었음을 의미합니다.이것은 대본의 마지막 작업이기 때문에, 대본이 이 서버에서 완전히 실행되었음을 확인합니다.

    시나리오 내용


    이 강좌에서 설명한 초기 서버 설정 안내서를 ansible-playbooks repositoryDigitalOcean Community Playbooks 에서 찾을 수 있습니다.스크립트 내용을 직접 복사하거나 다운로드하려면 각 스크립트의 맨 위에 있는 "원본"단추를 누르십시오.
    당신의 편의를 위해서, 여기에는 대본의 완전한 내용과 관련 문서도 포함되어 있습니다.

    변수 / 기본값.yml 회사

    copy_local_key 변수 파일은playbook 작업에 사용할 값을 포함합니다. 예를 들어 생성된 사용자 이름과 초기 서버 설정의 일부로 설치된 패키지입니다.
    변수/기본값.yml 회사
    ---
    create_user: sammy
    copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"
    sys_packages: [ 'curl', 'vim', 'git', 'ufw']
    

    대본yml 회사

    default.yml 파일은 이 설정의 모든 작업을 정의하는 위치입니다.이것은 우선 이 설정의 대상이 되어야 하는 서버 그룹(playbook.yml을 정의한 다음all을 사용하여 기본적으로 권한 향상become: true을 사용하여 작업을 수행해야 한다고 정의합니다.그런 다음 구성 옵션을 로드하기 위해 변수 파일sudo을 포함합니다.
    대본yml 회사
    ---
    - hosts: all
      become: true
      vars_files:
        - vars/default.yml
    
      tasks:
        - name: Install Prerequisites
          apt: name=aptitude update_cache=yes state=latest force_apt_get=yes
    
      # Sudo Group Setup
        - name: Make sure we have a 'wheel' group
          group:
            name: wheel
            state: present
    
        - name: Allow 'wheel' group to have passwordless sudo
         lineinfile:
            path: /etc/sudoers
            state: present
            regexp: '^%wheel'
            line: '%wheel ALL=(ALL) NOPASSWD: ALL'
            validate: '/usr/sbin/visudo -cf %s'
    
      # User + Key Setup
        - name: Create a new regular user with sudo privileges
          user:
            name: "{{ create_user }}"
            state: present
            groups: wheel
            append: true
            create_home: true
            shell: /bin/bash
    
        - name: Set authorized key for remote user
          authorized_key:
            user: "{{ create_user }}"
            state: present
            key: "{{ copy_local_key }}"
    
        - name: Disable password authentication for root
          lineinfile:
            path: /etc/ssh/sshd_config
            state: present
            regexp: '^#?PermitRootLogin'
            line: 'PermitRootLogin prohibit-password'
    
      # Install Packages
        - name: Update apt
          apt: update_cache=yes
    
        - name: Install required system packages
          apt: name={{ sys_packages }} state=latest
    
     # UFW Setup
        - name: UFW - Allow SSH connections
          ufw:
            rule: allow
            name: OpenSSH
    
        - name: UFW - Deny all other incoming traffic by default
          ufw:
            state: enabled
            policy: deny
            direction: incoming
    
    
    
    이 시나리오를 마음대로 수정하거나 자신의 업무 흐름에 개인의 요구에 가장 적합한 새로운 임무를 포함하십시오.

    결론


    초기 서버 설정을 자동화하면 시간을 절약할 수 있을 뿐만 아니라 서버가 표준 설정을 따르고 필요에 따라 개선하고 사용자 정의할 수 있도록 보장할 수 있습니다.현대 응용 프로그램의 분포식 특성과 서로 다른 무대 환경 간의 높은 일치성에 대한 수요에 따라 이러한 자동화가 필요하다.
    이 안내서에서는 Sudo 액세스 권한이 있는 비root 사용자 만들기, UFW 활성화, 암호 기반 원격 root 로그인 해제 등 Ansible 자동화를 사용하여 새 서버에서 수행해야 할 초기 작업을 보여 줍니다.
    이 안내서에 초기 서버 설정을 사용자 정의하기 위한 새 작업을 포함하려면 설명서 Ansible 안내서 Configuration Management 101: Writing Ansible Playbooks 를 참조하십시오.또한 How to Use Ansible Roles to Abstract your Infrastructure Environment 에서 안내서를 볼 수 있습니다.