Како да се користи 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 хостови:

  1. Создадете нов корисник sudo и поставете sudo без лозинка.
  2. Копирајте локален јавен клуч SSH и вклучете го во датотеката authorized_keys за новиот административен корисник на оддалечениот домаќин (ако претходно користевте лозинка за SSH).
  3. Оневозможете ја автентикацијата заснована на лозинка за root корисникот.
  4. Инсталирајте системски пакети.

Откако книгата за игри ќе заврши со работа, ќе имате нов корисник кој можете да го користите за да се најавите на серверот.

За почеток, најавете се на корисник со овозможен sudo на вашиот Ansible контролен јазол сервер.

Чекор 1 - Подготовка на вашиот контролен јазол Ansible

На серверот за контролен јазол Ansible, додајте ја IP-а на далечинскиот сервер на домаќинот Ansible во датотеката со залихи на Ansible. Користејќи го vi или претпочитаниот уредувач на текст, отворете ја датотеката со инвентар Ansible:

  1. sudo vi /etc/ansible/hosts

Ова ќе ја отвори вашата датотека со инвентар Ansible. Додајте ја IP-а на вашиот далечински сервер Ansible домаќин во блокот [сервери]:

[servers]
server1 ansible_host=your_remote_server_ip

. . .

Зачувајте ја и затворете ја датотеката.

Сега ќе ја тестирате и автентицирате вашата SSH врска помеѓу овој контролен јазол Ansible и вашиот далечински сервер за домаќин на Ansible:

  1. ssh root@your_remote_server_ip

Прифатете го барањето за автентикација и внесете ја вашата лозинка ако се побара. Откако ќе ја потврдите врската SSH, притиснете CTRL+D за да ја затворите врската и да се вратите во контролниот јазол.

Чекор 2 - Подготовка на вашата Playbook

Датотеката playbook.yml е местото каде што се дефинирани сите ваши задачи. Задачата е најмалата единица на дејствување што можете да ја автоматизирате користејќи Ansible Playbook. Создадете ја вашата датотека со Playbook користејќи vi или претпочитаниот уредувач на текст:

  1. 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, можете да ја користите следнава команда:

  1. 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, доколку сте користеле лозинка на прво место):

  1. ansible-playbook playbook.yml -l server1 -u sammy

Исто така, ќе можете да се најавите на серверот со:

  1. ssh sammy@your_remote_server_ip

Не заборавајте да го замените sammy со корисникот дефиниран со променливата created_username и server_host_or_IP со името на домаќинот или IP адресата на вашиот сервер.

Заклучок

Автоматизирањето на почетното поставување на серверот може да ви заштеди време, а исто така да бидете сигурни дека вашите сервери ќе следат стандардна конфигурација што може да се подобри и прилагоди на вашите потреби. Со дистрибуираната природа на современите апликации и потребата за поголема конзистентност помеѓу различните средини за поставување, автоматизацијата како оваа станува неопходност.

Во ова упатство, покажавте како да го користите Ansible за автоматизирање на почетните задачи што треба да се извршат на нов сервер, како што е создавање на неroot корисник со пристап sudo, инсталирање пакети и оневозможување на далечинско најавување базирано на лозинка за root.

За повеќе информации за тоа како да ги стартувате книгите за игри Ansible, проверете го нашиот Водич за листи за измами Ansible.

Ако сакате да вклучите нови задачи во оваа книга за понатамошно приспособување на почетното поставување на серверот, погледнете го нашиот воведен водич за Ansible Како да користите Ansible улоги за апстракција на вашата инфраструктурна средина.