Како да се користи Ansible за автоматизирање на почетното поставување на серверот на Rocky Linux 9
Вовед
Автоматизацијата на серверот сега игра суштинска улога во администрацијата на системите, поради природата за еднократна употреба на модерните апликациски средини. Ansible вообичаено се користат за да се насочи процесот на автоматизирање на поставувањето на серверот преку воспоставување стандардни процедури за нови сервери, истовремено намалувајќи ја човечката грешка поврзана со рачно поставување.
Ansible нуди едноставна архитектура која не бара специјален софтвер да се инсталира на јазлите. Исто така, обезбедува робустен сет на функции и вградени модули кои го олеснуваат пишувањето скрипти за автоматизација.
Овој водич објаснува како да се користи Ansible за да се автоматизираат чекорите содржани во нашиот првичен водич за поставување сервер за серверите Rocky Linux 9.
Предуслови
За да го следите ова упатство, ќе ви треба:
- Еден контролен јазол Ansible: машина Rocky Linux 9 со инсталирана и конфигурирана Ansible да се поврзе со вашите Ansible домаќини користејќи SSH клучеви. Проверете дали контролниот јазол има редовен корисник со дозволи за sudo и овозможен заштитен ѕид, како што е објаснето во нашата Како да инсталирате и конфигурирате Ansible на Rocky Linux 9. Обично не треба да инсталирате од истата верзија на Linux на истата цел верзија (на пример, од Rocky Linux 9 до Rocky Linux 9 во овој случај), но одржува сè конзистентно за демонстративни цели.
- Еден далечински сервер со чиста инсталација на Rocky Linux 9: не е потребно претходно поставување на овој сервер, но мора да имате SSH пристап до овој сервер од контролниот јазол Ansible споменат погоре. Ако веќе немате SSH пристап до оддалечениот сервер од контролниот јазол Ansible, погледнете го нашиот туторијал за Како да поставите SSH клучеви. Овој сервер ќе стане далечински сервер Ansible домаќин, кој е наменет за автоматско обезбедување од контролниот јазол Ansible.
Што прави оваа Playbook?
Оваа книга за игри Ansible обезбедува алтернатива за рачно извршување на процедурата наведена во поставувањето SSH клучеви на Rocky Linux 9 секогаш кога ќе подигнете сервер. Поставете ја вашата Playbook еднаш и користете ја за секој сервер потоа.
Извршувањето на оваа книга ќе ги изврши следните дејства на вашите Ansible хостови:
- Создадете нов корисник sudo и поставете
sudo
без лозинка. - Копирајте локален јавен клуч SSH и вклучете го во датотеката
authorized_keys
за новиот административен корисник на оддалечениот домаќин (ако претходно користевте лозинка за SSH). - Оневозможете ја автентикацијата заснована на лозинка за root корисникот.
- Инсталирајте системски пакети.
Откако книгата за игри ќе заврши со работа, ќе имате нов корисник кој можете да го користите за да се најавите на серверот.
За почеток, најавете се на корисник со овозможен sudo
на вашиот Ansible контролен јазол сервер.
Чекор 1 - Подготовка на вашиот контролен јазол Ansible
На серверот за контролен јазол Ansible, додајте ја IP-а на далечинскиот сервер на домаќинот Ansible во датотеката со залихи на Ansible. Користејќи го vi
или претпочитаниот уредувач на текст, отворете ја датотеката со инвентар Ansible:
- sudo vi /etc/ansible/hosts
Ова ќе ја отвори вашата датотека со инвентар Ansible. Додајте ја IP-а на вашиот далечински сервер Ansible домаќин во блокот [сервери]
:
[servers]
server1 ansible_host=your_remote_server_ip
. . .
Зачувајте ја и затворете ја датотеката.
Сега ќе ја тестирате и автентицирате вашата SSH врска помеѓу овој контролен јазол Ansible и вашиот далечински сервер за домаќин на Ansible:
- ssh root@your_remote_server_ip
Прифатете го барањето за автентикација и внесете ја вашата лозинка ако се побара. Откако ќе ја потврдите врската SSH, притиснете CTRL+D
за да ја затворите врската и да се вратите во контролниот јазол.
Чекор 2 - Подготовка на вашата Playbook
Датотеката playbook.yml
е местото каде што се дефинирани сите ваши задачи. Задачата е најмалата единица на дејствување што можете да ја автоматизирате користејќи Ansible Playbook. Создадете ја вашата датотека со Playbook користејќи vi
или претпочитаниот уредувач на текст:
- vi playbook.yml
Ова ќе отвори празна YAML-датотека. Пред да започнете да додавате задачи во вашата книга за игри, започнете со додавање на следново:
---
- hosts: all
become: true
vars:
created_username: sammy
Слободно заменете го корисничкото име со едно по ваш избор.
Речиси секоја книга за игри што ќе ја сретнете ќе започне со декларации слични на оваа. hosts
изјавува кои сервери ќе ги насочува контролниот јазол Ansible со оваа книга. become
наведува дали сите команди ќе се вршат со зголемени root привилегии.
vars
ви овозможува да складирате податоци во променливи. Ако одлучите да го промените ова корисничко име во иднина, ќе треба само да ја уредите оваа единствена линија во вашата датотека.
Забелешка: ако сакате да ја видите датотеката со плејбук во нејзината конечна завршена состојба, префрлете се на чекор 6. YAML-датотеките може да бидат особени со нивната структура на вовлекување, па можеби ќе сакате да ја проверите повторно вашата книга за игри штом ќе Ги додадов сите ваши задачи.
Чекор 3 - Додавање задачи за поставување Sudo корисник во вашата Playbook
Стандардно, задачите се извршуваат синхроно од Ansible со редослед од врвот до дното во вашата книга за игри. Ова значи дека подредувањето на задачите е важно и можете безбедно да претпоставите дека една задача ќе заврши со извршување пред да започне следната задача.
Сите задачи во оваа книшка може да стојат сами и повторно да се користат во другите ваши книги.
Добра практика е да се избегне широка употреба на root корисникот. Можете да го автоматизирате создавањето на корисник на кој му се доделени привилегии sudo
со додавање:
tasks:
- name: Setup passwordless sudo
lineinfile:
path: /etc/sudoers
state: present
regexp: '^%sudo'
line: '%sudo ALL=(ALL) NOPASSWD: ALL'
validate: '/usr/sbin/visudo -cf %s'
- name: Create a new regular user with sudo privileges
user:
name: "{{ created_username }}"
state: present
groups: wheel
append: true
create_home: true
Го користите модулот lineinfile
Ansible за насочување и замена на одредена линија во датотека. Во овој случај, користите regex за да насочите одредена линија во датотеката sudoers
, а потоа ја менувате за да дозволите користење без лозинка на sudo
. Исто така, користите visudo
за да ги потврдите вашите промени за да спречите што било да се скрши.
За да го искористите ова, додавате нов корисник со модулот user
. Ansible ќе се погрижи овој корисник да е создаден ако веќе не постои, дека корисникот припаѓа на групата wheel
(admin) додека не е отстранет од другите групи и дека е создаден домашен директориум.
Забелешка: Погрижете се да ги вклучите наводниците околу кадравите загради што укажуваат на променлива. Испуштањето на овие наводници е многу честа синтаксна грешка Ansible.
Чекор 4 - Додавање на SSH-поставување клуч и оневозможување на задачите за root лозинка во вашата Playbook
Ansible работи под претпоставка дека користите SSH клучеви. Силно се препорачува и генерално добра практика да се спари употребата на клучот SSH со оневозможување на автентикација на лозинката root. За да го автоматизирате ова, додадете:
- name: Set authorized key for remote user
ansible.posix.authorized_key:
user: "{{ created_username }}"
state: present
key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"
- name: Disable password authentication for root
lineinfile:
path: /etc/ssh/sshd_config
state: present
regexp: '^#?PermitRootLogin'
line: 'PermitRootLogin prohibit-password'
Модулот authorized_key
може да се користи ако го наведете корисничкото име и локацијата на клучот. Овде, патеката кон вашиот клуч е изградена со помош на функцијата lookup
на Ansible.
Модулот lineinfile
се користи за пребарување и замена на линија во sshd_config
со цел да се оневозможи автентикација на лозинка за root, ограничувајќи го пристапот до неговите привилегии за зголемени безбедност.
Чекор 5 - Додавање задача за инсталирање пакети во вашата Playbook
Ansible може да обезбеди одредени пакети секогаш да се инсталираат на вашиот сервер. Наместо да го повикате dnf install
на секој поединечен пакет или да го разделите на повеќе задачи, можете да ги наведете сите ваши посакувани пакети:
- name: Update and install required system packages
dnf:
pkg:
- curl
- vim
- git
- firewalld
state: latest
update_cache: true
Можете да додавате или отстранувате пакети по ваш вкус. Ова ќе осигури дека сите пакети не се само присутни, туку и на најновата верзија и ќе бидат направени откако ќе се повика ажурирањето со dnf
.
Чекор 6 - Прегледајте ја вашата целосна Playbook
Вашата книга за игри треба да изгледа приближно како следново, со мали разлики во зависност од вашите прилагодувања:
---
- hosts: all
become: true
vars:
created_username: sammy
tasks:
- name: Setup passwordless sudo
lineinfile:
path: /etc/sudoers
state: present
regexp: '^%sudo'
line: '%sudo ALL=(ALL) NOPASSWD: ALL'
validate: '/usr/sbin/visudo -cf %s'
- name: Create a new regular user with sudo privileges
user:
name: "{{ created_username }}"
state: present
groups: wheel
append: true
create_home: true
- name: Set authorized key for remote user
ansible.posix.authorized_key:
user: "{{ created_username }}"
state: present
key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"
- name: Disable password authentication for root
lineinfile:
path: /etc/ssh/sshd_config
state: present
regexp: '^#?PermitRootLogin'
line: 'PermitRootLogin prohibit-password'
- name: Update and install required system packages
dnf:
pkg:
- curl
- vim
- git
- firewalld
state: latest
update_cache: true
Забелешка: Ова е нежен потсетник да внимавате на вашите вдлабнатини. Ако наидете на грешка, ова е многу веројатно виновникот. YAML предлага користење на 2 празни места како вовлекување, како што беше направено во овој пример.
Откако ќе бидете задоволни со вашата книга за игри, можете да излезете од уредувачот на текст и да зачувате.
Чекор 7 - Вклучување на Playbook за прв пат
Сега сте подготвени да ја извршите оваа книга за игри на еден или повеќе сервери. Повеќето книги за репродукција се стандардно конфигурирани да се извршуваат на секој сервер во вашиот инвентар, но вие ќе го одредите вашиот сервер овој пат.
За да ја извршите Playbook само на server1
, поврзувајќи се како root
, можете да ја користите следнава команда:
- ansible-playbook playbook.yml -l server1 -u root -k
Знамето -l
го одредува вашиот сервер, а знамето -u
одредува кој корисник да се најави на оддалечениот сервер. Бидејќи допрва треба да го поставите вашиот далечински сервер, root е вашата единствена опција. Знамето -k
е неопходно ако не користите SSH без лозинка: тоа ќе ве праша за лозинка за SSH.
Ќе добиете излез сличен на овој:
Output
. . .
PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************
server1 : ok=6 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Ова покажува дека поставувањето на вашиот сервер е завршено! Вашиот излез не мора да биде сосема ист, но важно е да имате нула неуспеси.
Сега, кога го направивте првото поставување за вашата книга за игри, сите последователни повици може да се направат со корисникот sammy
(и без знамето -k
, доколку сте користеле лозинка на прво место):
- ansible-playbook playbook.yml -l server1 -u sammy
Исто така, ќе можете да се најавите на серверот со:
- ssh sammy@your_remote_server_ip
Не заборавајте да го замените sammy со корисникот дефиниран со променливата created_username
и server_host_or_IP со името на домаќинот или IP адресата на вашиот сервер.
Заклучок
Автоматизирањето на почетното поставување на серверот може да ви заштеди време, а исто така да бидете сигурни дека вашите сервери ќе следат стандардна конфигурација што може да се подобри и прилагоди на вашите потреби. Со дистрибуираната природа на современите апликации и потребата за поголема конзистентност помеѓу различните средини за поставување, автоматизацијата како оваа станува неопходност.
Во ова упатство, покажавте како да го користите Ansible за автоматизирање на почетните задачи што треба да се извршат на нов сервер, како што е создавање на неroot корисник со пристап sudo
, инсталирање пакети и оневозможување на далечинско најавување базирано на лозинка за root.
За повеќе информации за тоа како да ги стартувате книгите за игри Ansible, проверете го нашиот Водич за листи за измами Ansible.
Ако сакате да вклучите нови задачи во оваа книга за понатамошно приспособување на почетното поставување на серверот, погледнете го нашиот воведен водич за Ansible Како да користите Ansible улоги за апстракција на вашата инфраструктурна средина.