
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 매뉴얼은 수동 실행 Ubuntu 18.04 initial server setup guide 및 setting up SSH keys on Ubuntu 18.04 매뉴얼에 설명된 프로세스를 대체하는 방법을 제공합니다.
이 playbook을 실행하면 Ansible 호스트에서 다음을 수행합니다.
aptitude
, Ansible는 apt
패키지 관리자의 대체품으로 우선 선택됩니다.authorized_keys
파일에 포함합니다.어떻게 이 시나리오를 사용합니까
첫 번째 작업은 do-community/ansible-playbooks 저장소에서 초기 서버 설정 시나리오와 의존 항목을 가져오는 것입니다.이 저장소를 Ansible control 노드 내의 로컬 폴더로 복제합니다.
저장소를 처음 사용하는 경우
do-community/ansible-playbooks
먼저 다음 명령을 사용하여 컨트롤러 노드에 저장소를 복제해야 합니다.- cd ~
- git clone https://github.com/do-community/ansible-playbooks.git
- cd ansible-playbooks
이전에 다른 지침을 따르면서 이 저장소를 복제한 경우 기존 ansible-playbooks
복제본에 액세스하여 git pull
명령을 실행하여 컨텐트가 업데이트되었는지 확인합니다.- cd ~/ansible-playbooks
- git pull
관심 있는 파일은 setup_ubuntu1804
폴더에 있으며 이 폴더에는 다음과 같은 구조가 있습니다.setup_ubuntu1804
├── playbook.yml
└── vars
└── default.yml
다음은 각 파일의 내용입니다.vars/default.yml
: 시나리오 설정을 사용자 정의하는 변수 파일입니다.playbook.yml
: 원격 서버에서 수행할 작업을 포함하는 시나리오 파일입니다.setup_ubuntu1804
디렉토리에 액세스하고 선택한 명령줄 편집기를 사용하여 파일을 엽니다.- cd setup_ubuntu1804
- 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
, git
및 ufw
에 확실히 보존할 것이다.vars/default.yml
의 변수를 업데이트한 후 파일을 저장하고 닫습니다.nano
를 사용하는 경우 CTRL + X
, Y
을 누른 다음 ENTER
을 누릅니다.이제 이 시나리오를 하나 이상의 서버에서 실행할 수 있습니다.기본적으로 대부분의 시나리오는 목록의 모든 서버에서 실행되도록 설정되어 있습니다.우리는 일부 서버나 한 대의 서버만 대본의 영향을 받는 것을 확보하기 위해
-l
로고를 사용할 수 있다.원격 서버에서 원격 호스트의playbook 명령을 연결하고 실행하는 데 사용할 사용자를 지정합니다.-u
에서만 시나리오를 실행하려면 server1
로 연결하려면 다음 명령을 사용할 수 있습니다.- 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 실행이 완료되면 다음 방법으로 서버에 로그인할 수 있습니다.
- ssh sammy@server_host_or_IP
root
변수로 정의된 사용자를 sammy로 교체하고 서버의 호스트 이름이나 IP 주소로 서버\uhost\u 또는 IP를 교체하는 것을 기억하십시오.create_user
변수를 현재 시스템 사용자가 아닌 사용자 정의 SSH 키를 가리키는 것으로 변경한 경우 새 사용자가 SSH를 통해 연결할 때 해당 개인 키의 위치를 지정하는 추가 매개 변수가 필요합니다.- ssh sammy@server_host_or_IP -i ~/.ssh/ansible_controller_key
서버에 로그인하면 UFW 방화벽의 활성 규칙을 확인하여 올바른 구성을 확인할 수 있습니다.- sudo ufw status
다음과 같은 출력을 얻어야 합니다.OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
UFW 방화벽이 성공적으로 활성화되었음을 의미합니다.이것은 대본의 마지막 작업이기 때문에, 대본이 이 서버에서 완전히 실행되었음을 확인합니다.시나리오 내용
이 강좌에서 설명한 초기 서버 설정 안내서를 ansible-playbooks repository 의 DigitalOcean 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 에서 안내서를 볼 수 있습니다.