Автоматизация настройки ubuntu server

Обновлено: 05.07.2024

После запуска нового сервера Ubuntu 18.04 нужно выполнить несколько шагов по базовой настройке. Это повысит безопасность и удобство использования вашего сервера, создаст прочную основу для дальнейшей работы.

Конечно, вы можете выполнить все эти шаги вручную, но автоматизация процесса сэкономит ваше время и уменьшит влияние человеческого фактора. Благодаря популяризации контейнерных приложений и микросервисов автоматизация серверов теперь играет важную роль в системном администрировании. Этот способ также позволяет быстро выполнить стандартные процедуры по настройке новых серверов.

В этом мануале мы расскажем, как использовать Ansible для автоматизации всех этапов, описанных в руководстве по начальной настройке сервера Ubuntu 18.04. Ansible – это современный инструмент управления конфигурацией, который можно использовать для автоматической оркестровки и настройки удаленных систем.

Требования

Чтобы написать плейбук и выполнить автоматическую настройку которую мы обсуждаем в этом мануале, вам потребуется:

  • Установка Ansible на локальном компьютере или на удаленном сервере, который вы используете в качестве Control Node для Ansible. Выполните раздел 1 мануала Установка и настройка Ansible в Ubuntu 18.04.
  • Корневой доступ к одному или нескольким серверам Ubuntu 18.04, которые будут управляться через Ansible.

Перед запуском плейбука важно убедиться, что Ansible может подключаться к вашим серверам через SSH и запускать модули с помощью Python. В следующих двух разделах описано, как настроить инвентарь Ansible, включить в него ваши серверы и как запустить специальные команды Ansible для проверки подключения и валидных учетных данных.

Файл инвентаря Ansible

Файл инвентаря содержит информацию о хостах, которыми вы будете управлять с помощью Ansible. В этот файл можно включить от одного до нескольких сотен серверов. Хосты в нем могут быть организованы в группы и подгруппы. Файл инвентаря также часто используется для установки переменных, действительных только для определенных хостов и групп, которые затем можно использовать в плейбуках и шаблонах. Некоторые переменные также могут влиять на способ запуска плейбука, например ansible_python_interpreter.

Чтобы просмотреть содержимое инвентаря Ansible по умолчанию, откройте файл /etc/ansible/hosts с помощью редактора на локальном компьютере или на Ansible Control Node:

sudo nano /etc/ansible/hosts

Примечание: Некоторые установки Ansible не создают файл инвентаря по умолчанию. Если в вашей системе файл не существует, вы можете создать файл /etc/ansible/hosts самостоятельно или указать собственный путь к инвентарю с помощью параметра -i при запуске команд и плейбуков.

Файл инвентаря по умолчанию, предоставляемый установкой Ansible, содержит несколько примеров, которые вы можете использовать в качестве шаблона для настройки. В следующем примере мы определим группу из трех именованных серверов, каждый из которых идентифицируется по своему псевдониму: server1, server2 и server3.

[servers] server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[servers:vars] ansible_python_interpreter=/usr/bin/python3

Подгруппа server:vars устанавливает параметр хоста ansible_python_interpreter, который будет действителен для всех хостов, включенных в группу servers. Этот параметр гарантирует, что удаленный сервер использует исполняемый файл Python 3 /usr/bin/python3, а не /usr/bin/python (Python 2.7), которого нет в последних версиях Ubuntu.

Чтобы завершить настройку файла инвентаря, замените условные IP-адреса в файле IP-адресами ваших серверов. Когда вы закончите, сохраните и закройте файл (Ctrl + X, затем y, чтобы сохранить изменения, а затем Enter).

Теперь, когда ваш файл инвентаря готов, пришло время проверить подключение к вашим нодам.

Тестирование подключения

После настройки файла инвентаря и включения в него ваших серверов пришло время проверить, может ли Ansible подключиться к этим серверам и запускать команды через SSH. В этом мануале мы будем использовать учетную запись root сервера Ubuntu, поскольку обычно это единственная доступная учетная запись на свежих серверах. Этот плейбук создаст нового пользователя без прав root с привилегиями sudo, которого вы сможете использовать при последующих взаимодействиях с удаленным сервером.

С вашего локального компьютера или Ansible Control Node запустите:

ansible -m ping all -u root

Эта команда использует встроенный модуль Ansible ping для проверки подключения на всех нодах из вашего инвентаря по умолчанию от имени пользователя root. Модуль ping проверит:

  • Доступны ли ваши хосты;
  • Валидны ли ваши учетные данные SSH;
  • Могут ли хосты запускать модули Ansible с помощью Python.

Если для подключения к удаленным серверам вместо аутентификации по ключам вы используете парольную аутентификацию, вы должны указать дополнительный параметр -k в команде Ansible, чтобы он запросил пароль подключающегося пользователя.

Примечание: Некоторые серверы могут поддерживать дополнительные меры безопасности против парольной аутентификации пользователя root. В некоторых случаях вам может потребоваться вручную войти на сервер, чтобы изменить исходный пароль root.

Вы должны получить похожий вывод:

server1 | SUCCESS => "changed": false,
"ping": "pong"
>
server2 | SUCCESS => "changed": false,
"ping": "pong"
>
server3 | SUCCESS => "changed": false,
"ping": "pong"
>

Если вы впервые подключаетесь к этим серверам через SSH, вам будет предложено подтвердить подлинность хостов, к которым вы подключаетесь через Ansible. При появлении запроса введите yes, а затем нажмите Enter для подтверждения.

Если вы получаете от хоста ответ pong, это означает, что на этом сервере можно запускать команды Ansible и плейбуки.

Что делает этот плейбук?

Этот плейбук Ansible предоставляет альтернативу ручной начальной настройке сервера Ubuntu 18.04, описанной в этом мануале, и настройке ключей по мануалу Установка SSH-ключей в Ubuntu 18.04.

Запуск этого плейбука приведет к выполнению следующих действий:

  1. Создается группа wheels, а затем настраивается sudo без пароля.
  2. В этой группе создается новый администратор с именем, указанным в переменной create_user.
  3. Открытый ключ SSH копируется из расположения, заданного переменной copy_local_key, и добавляется в файл authorized_keys для пользователя, созданного на предыдущем этапе.
  4. Отключается парольная аутентификация для пользователя root.
  5. Обновляется локальный индекс пакетов apt и устанавливаются базовые пакеты, определяемые переменной sys_packages.
  6. Брандмауэр UFW настраивается на поддержку только SSH-соединений, после чего он будет сбрасывать любые другие запросы.

Для получения дополнительной информации о каждом из этапов в плейбуке, пожалуйста, обратитесь к мануалу по начальной настройке сервера Ubuntu 18.04.

После выполнения плейбука вы сможете войти на сервер, используя только что созданную учетную запись sudo.

Как использовать этот плейбук?

Для начала мы загрузим содержимое плейбука на Ansible Control Node. Это может быть либо локальный компьютер, либо удаленный сервер, на котором установлен Ansible и настроен инвентарь.

Чтобы скачать этот плейбук с помощью командной строки, вы можете использовать curl:

Это загрузит содержимое плейбука в файл initial_server_setup.yml по вашему текущему локальному пути. Вы можете просмотреть содержимое плейбука, открыв файл в редакторе:

sudo nano initial_server_setup.yml

Открыв файл, найдите раздел vars с тремя различными переменными, которые требуют вашего внимания:

  1. create_user: имя учетной записи пользователя без полномочий root, для создания и предоставления привилегий sudo. В нашем примере используется 8host, но вы можете использовать другое имя пользователя.
  2. copy_local_key: локальный путь к действительному открытому ключу SSH, который будет использоваться в качестве авторизованного ключа для новой учетной записи sudo. Значение по умолчанию указывает на открытый ключ текущего локального пользователя, расположенный в

Когда вы закончите обновлять переменные в initial_server_setup.yml, сохраните и закройте файл.

Теперь вы готовы запустить свой плейбук на одном или нескольких серверах. По умолчанию большинство плейбуков настроено на выполнение на всех серверах из инвентаря. Вы можете использовать флаг -l, чтобы плейбук затронул только конкретное подмножество серверов или один сервер. Чтобы выполнить плейбук только на сервере server1, вы можете использовать следующую команду:

ansible-playbook initial_server_setup.yml -l server1

Вы получите такой вывод:

Как только плейбук будет выполнен, вы сможете войти на сервер с помощью команды:

Не забудьте заменить 8host именем вашего пользователя из переменной create_user, а server_domain_or_IP именем хоста или IP-адресом вашего сервера.

Если вы установили открытый ключ с переменной copy_local_key, вам нужно будет указать дополнительный параметр, указывающий расположение его закрытого ключа:

ssh 8host@server_domain_or_IP -i

После входа на сервер вы можете проверить активные правила брандмауэра UFW и убедиться, что он правильно настроен:

sudo ufw status

Вы должны получить похожий вывод:

Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)

Это означает, что брандмауэр UFW успешно включен. Это было последнее задание плейбука, а потому это подтверждает, что плейбук был полностью выполнен на этом сервере.

Содержание плейбука

Плейбук по начальной настройке сервера можно найти в репозитории ansible-playbooks на GitHub. Чтобы скопировать или загрузить содержимое сценария напрямую, нажмите кнопку Raw в верхней части сценария или нажмите сюда, чтобы просмотреть исходное содержимое плейбука.

В целом же плейбук выглядит так:

---
- hosts: all
remote_user: root
gather_facts: false
vars:
create_user: 8host
copy_local_key: ">"
sys_packages: [ 'curl', 'vim', 'git', 'ufw' ] tasks:
- 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'
- name: Create a new regular user with sudo privileges
user:
name: ">"
groups: wheel
shell: /bin/bash
- name: Set authorized key for remote user
authorized_key:
user: ">"
state: present
key: ">"
- name: Disable password authentication for root
lineinfile:
path: /etc/ssh/sshd_config
state: present
regexp: '^PermitRootLogin'
line: 'PermitRootLogin prohibit-password'
- name: Update apt
apt: update_cache=yes
- name: Install required system packages
apt: name=> state=latest
- 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

Вы можете подогнать этот плейбук под ваши потребности или добавить новые задания, чтобы лучше организовать этапы вашего рабочего процесса.

Заключение

Автоматизация начальной настройки сервера может сэкономить ваше время, а также обеспечить все ваши серверы стандартной конфигурацией, которую можно улучшить и настроить в соответствии с потребностями. Из-за распределенного характера современных приложений и необходимости в высокой согласованности различных промежуточных сред автоматизация базовых этапов настройки становится все важнее.

В этом мануале мы продемонстрировали, как использовать Ansible для автоматизации основных задач, которые должны выполняться на новом сервере: это создание пользователя с доступом sudo, включение брандмауэра UFW и отключение удаленного входа в систему для root.

Если вы хотите добавить в плейбук новые задачи для дальнейшей настройки базовой среды сервера, пожалуйста, обратитесь к руководству Создание плейбука Ansible.

Когда вы впервые создаете новый сервер Ubuntu 18.04, есть несколько шагов по настройке, которые вы должны предпринять на ранних этапах базовой установки. Это повысит безопасность и удобство использования вашего сервера, работая в качестве прочной основы для последующих действий.

Хотя вы можете выполнить эти шаги вручную, автоматизация процесса сэкономит ваше время и устранит человеческие ошибки. Благодаря популяризации контейнерных приложений и микросервисов автоматизация серверов теперь играет важную роль в системном администрировании. Это также способ установить стандартные процедуры для новых серверов.

В этом руководстве объясняется, как использовать Ansible для автоматизации шагов, описанных в нашем Руководстве по начальной настройке сервера. Ansible - это современный инструмент управления конфигурацией, который можно использовать для автоматизации предоставления и настройки удаленных систем.

Предполетная проверка

Чтобы выполнить автоматическую настройку, описанную в книге, которую мы обсуждаем в этом руководстве, вам потребуется:

Ansible установлен либо на вашем локальном компьютере, либо на удаленном сервере, который вы настроили как узел управления Ansible. Вы можете выполнить Шаг 1 из учебника Как установить и настроить Ansible в Ubuntu 18.04, чтобы получить эту настройку.
Корневой доступ к одному или нескольким серверам Ubuntu 18.04, которые будут управляться Ansible.
Перед запуском playbook важно убедиться, что Ansible может подключаться к вашим серверам через SSH и запускать модули Ansible с помощью Python. В следующих двух разделах описано, как настроить инвентаризацию Ansible для включения ваших серверов и как запустить специальные команды Ansible для проверки подключения и действительных учетных данных.

Файл инвентаря
Файл инвентаря содержит информацию о машинах, которые вы будете управлять с Ansible. Вы можете включить от одного до нескольких сотен серверов в свой файл инвентаризации, и хосты могут быть организованы в группы и подгруппы. Файл инвентаризации также часто используется для установки переменных, которые будут действительны только для определенных хостов и групп, чтобы использоваться в книгах воспроизведения и шаблонах. Некоторые переменные также могут влиять на способ запуска playbook, например, ansible_python_interpreter переменная, которую мы увидим через минуту.

Чтобы проверить содержимое инвентаризации Ansible по умолчанию, откройте /etc/ansible/hosts файл с помощью выбранного редактора командной строки на локальном компьютере или на узле управления Ansible:

Примечание: некоторые установки Ansible не создают файл инвентаризации по умолчанию. Если файл не существует в вашей системе, вы можете создать новый файл в /etc/ansible/hosts или указать собственный путь к инвентарю с помощью параметра -i при запуске команд и списков воспроизведения.

Файл инвентаризации по умолчанию, предоставляемый установкой Ansible, содержит несколько примеров, которые вы можете использовать в качестве ссылок для настройки инвентаризации. В следующем примере определяется группа именованных серверов с тремя различными серверами, каждый из которых идентифицируется по своему псевдониму: server1, server2 и server3:

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

server: Подгруппа vars устанавливает ansible_python_interpreter параметр хоста, который будет действителен для всех узлов, входящих в servers группу. Этот параметр гарантирует, что удаленный сервер использует /usr/bin/python3 исполняемый файл Python 3 вместо /usr/bin/python(Python 2.7), чего нет в последних версиях Ubuntu.

Чтобы завершить настройку файла инвентаризации, замените выделенные IP-адреса IP-адресами ваших серверов. Когда вы закончите, сохраните и закройте файл, нажав CTRL+X затем, чтобы подтвердить изменения, а затем ENTER.

Теперь, когда ваш файл инвентаря готов, пришло время проверить подключение к вашим узлам

Тестирование подключения
После настройки файла инвентаризации для включения ваших серверов, пришло время проверить, может ли Ansible подключиться к этим серверам и запускать команды через SSH. В этом руководстве мы будем использовать корневую учетную запись Ubuntu, поскольку обычно это единственная доступная учетная запись на вновь создаваемых серверах. Эта книга воспроизведения создаст нового пользователя без sudo полномочий root с правами, которые вы должны использовать при последующих взаимодействиях с удаленным сервером.

С вашего локального компьютера или узла управления Ansible запустите:

Эта команда будет использовать встроенный ping модуль Ansible для запуска теста подключения на всех узлах из вашего инвентаря по умолчанию, подключившись от имени пользователя root. Модуль ping будет проверять:
если узлы доступны
если у вас есть действительные учетные данные SSH
если хосты могут запускать модули Ansible с использованием Python.

Если вместо аутентификации на основе ключей вы используете аутентификацию на основе пароля для подключения к удаленным серверам, вы должны указать дополнительный параметр -k для команды Ansible, чтобы он запрашивал пароль для подключающегося пользователя.

Примечание. Имейте в виду, что некоторые серверы могут иметь дополнительные меры безопасности против аутентификации на основе паролей от имени пользователя root, и в некоторых случаях вам может потребоваться вручную войти на сервер, чтобы изменить исходный пароль root.

Вы должны получить вывод, похожий на этот:

server1 | SUCCESS => <
"changed": false,
"ping": "pong"
>
server2 | SUCCESS => <
"changed": false,
"ping": "pong"
>
server3 | SUCCESS => <
"changed": false,
"ping": "pong"
>

Если вы впервые подключаетесь к этим серверам через SSH, вас попросят подтвердить подлинность хостов, к которым вы подключаетесь через Ansible. При появлении запроса введите, yesа затем нажмите Enterдля подтверждения.

Как только вы получаете ответ «понг» от хоста, это означает, что вы готовы запускать команды Ansible и playbooks на этом сервере.

Что делает этот Playbook?

Эта книга воспроизведения Ansible предоставляет альтернативу ручному запуску процедуры, описанной в руководстве по первоначальной настройке сервера Ubuntu 18.04 и руководстве по настройке ключей SSH в Ubuntu 18.04.

Запуск этой пьесы приведет к выполнению следующих действий:

Колеса административной группы создаются, а затем настраиваются для sudo без пароля.
В этой группе создается новый административный пользователь, используя имя, указанное в create_userпеременной.
Открытый ключ SSH копируется из местоположения, заданного переменной copy_local_key, и добавляется в authorized_keys файл для пользователя, созданного на предыдущем шаге.
Проверка подлинности на основе пароля отключена для пользователя root.
Индекс локального apt пакета обновляется, и sys_packages устанавливаются базовые пакеты, определяемые переменной.
Брандмауэр UFW настроен на разрешение только SSH-соединений и отклоняет любые другие запросы.
Для получения дополнительной информации о каждом из шагов, включенных в эту книгу, пожалуйста, обратитесь к нашему руководству по первоначальной настройке сервера Ubuntu 18.04 .

После завершения воспроизведения книги вы сможете войти на сервер, используя только что созданную sudo учетную запись.

Как использовать эту книгу

Для начала мы загрузим содержимое книги воспроизведения на ваш Ansible Control Node. Это может быть либо локальный компьютер, либо удаленный сервер, на котором установлен Ansible и настроен ваш инвентарь.

Для вашего удобства содержание этой книги также включено в следующий раздел данного руководства.

Чтобы скачать эту книгу из командной строки, вы можете использовать curl:

Это позволит загрузить содержимое книги воспроизведения в файл с именем initial_server_setup.yml по вашему текущему локальному пути. Вы можете просмотреть содержимое книги воспроизведения, открыв файл в редакторе командной строки по своему выбору:

Открыв файл playbook, вы должны заметить раздел с именем vars с тремя различными переменными, которые требуют вашего внимания:

create_user : имя учетной записи пользователя без полномочий root для создания и предоставления привилегий sudo. В нашем примере используется user, но вы можете использовать любое имя пользователя.
copy_local_key : Локальный путь к действительному публичному ключу SSH для настройки в качестве авторизованного ключа для новой sudo учетной записи без полномочий root. Значение по умолчанию указывает на открытый ключ текущего локального пользователя, расположенный по адресу

/.ssh/id_rsa.pub.
sys_packages : список основных системных пакетов, которые будут установлены с помощью инструмента менеджера пакетов apt.
Как только вы закончите обновление переменных внутри initial_server_setup.yml, сохраните и закройте файл.

Теперь вы готовы запустить эту книгу на одном или нескольких серверах. По умолчанию большинство плейбуков настроено на выполнение на серверах из вашего инвентаря. Мы можем использовать этот -l флаг, чтобы убедиться, что только подмножество серверов или один сервер подвержены влиянию playbook. Чтобы выполнить playbook только на server1, вы можете использовать следующую команду:

Системы управления конфигурацией разрабатываются для администраторов и операционных отделов с целью ускорить процедуры управления большим количеством серверов. Они позволяют автоматически контролировать много разных систем из единого центра.

Хотя для систем Linux выпущено много популярных инструментов управления конфигурациями, в том числе Chef и Puppet, эти инструменты сложнее, чем требуется большинству людей. Система Ansible — отличная альтернатива этим инструментам, поскольку имеет простую архитектуру, не требует установки на узлы специального программного обеспечения, использует SSH для выполнения задач автоматизации и файлы YAML для определения деталей выделения ресурсов.

Шаг 1 — Установка Ansible

Чтобы начать использовать Ansible для управления серверной инфраструктурой, необходимо предварительно установить программное обеспечение Ansible на компьютер, который будет выступать в качестве узла управления Ansible. Мы будем использовать репозитории Ubuntu по умолчанию.

Сначала обновите индекс пакетов системы с помощью следующей команды:

После этого обновления вы можете установить программное обеспечение Ansible следующим образом:

Нажмите Y при запросе для подтверждения установки.

Теперь на узле управления Ansible есть все программное обеспечение, необходимое для администрирования хостов. Теперь мы рассмотрим настройку файла инвентаризации, чтобы Ansible мог взаимодействовать с вашими управляемыми узлами.

Шаг 2 — Настройка файла инвентаризации

Файл инвентаризации содержит информацию о хостах, которыми вы будете управлять с помощью Ansible. Вы можете включить в файл инвентаризации от одного до нескольких сотен серверов и распределить хосты по группам и подгруппам. Файл инвентаризации также часто задает переменные, действующие только для определенных хостов или групп, чтобы их можно было использовать с плейбуками и шаблонами. Некоторые переменные также влияют на способ запуска плейбука, и в их число входит переменная ansible_python_interpreter , которую мы сейчас увидим.

Чтобы изменить заданное по умолчанию содержание файла инвентаризации Ansible, откройте файл /etc/ansible/hosts в предпочитаемом редакторе на узле управления Ansible:

Примечание. Хотя Ansible обычно создает файл инвентаризации по умолчанию в etc/ansible/hosts ​​, вы можете создавать файлы инвентаризации в любом месте, которое соответствует вашим потребностям. В нашем случае вам нужно будет предоставить путь к вашему настраиваемому файлу инвентаризации с помощью параметра -i при запуске команд Ansible и плейбуков. Использование файлов инвентаризации на каждом проекте поможет минимизировать риск запуска плейбука на несоответствующей группе серверов.

Файл инвентаризации, используемый Ansible по умолчанию, содержит ряд примеров, которые вы можете использовать как образец при настройке инвентаризации. В следующем примере определяется группа [servers] с тремя разными серверами, каждый из которых имеет собственный индентификатор: server1, server2 и server3. Обязательно замените выделенные IP-адреса IP-адресами ваших хостов Ansible.

Подгруппа all:vars задает параметр хоста ansible_python_interpreter , который будет действовать для всех хостов, включенных в этот инвентарный список. С этим значением параметра удаленный сервер использует исполняемый файл Python 3 /usr/bin/python3 , а не /usr/bin/python (Python 2.7), отсутствующий в последних версиях Ubuntu.

Когда вы закончите, сохраните и закройте файл, нажав CTRL+X , затем Y и ENTER для подтверждения изменений.

Если вы захотите проверить файл инвентаризации, вы можете запустить команду:

Результат будет выглядеть примерно так, только в нем будет показана ваша серверная инфраструктура, определенная в файле инвентаризации:

После настройки файла инвентаризации у вас появится все необходимое для тестирования подключения к хостам Ansible.

Шаг 3 — Тестирование подключения

После настройки файла инвентаризации для вашего сервера, вы можете проверить способность Ansible подключаться к этим серверам и запускать команды через SSH.

Для этого руководства мы будем использовать учетную запись root в Ubuntu, поскольку обычно это единственная учетная запись, которая доступна по умолчанию на новых серверах. Если на ваших хостах Ansible уже имеются учетные записи sudo, вам рекомендуется использовать эту учетную запись.

Вы можете использовать аргумент -u , чтобы задать пользователя удаленной системы. Если не указано иное, Ansible попытается подключиться от имени текущего пользователя системы на узле управления.

Запустите на локальном компьютере или узле управления Ansible следующую команду:

  • доступность хостов;
  • наличие действующих учетных данных SSH;
  • способность хостов запускать модули Ansible с помощью Python.

Результаты должны выглядеть примерно следующим образом:

Если это ваше первое подключение к данным серверам через SSH, вы должны будете подтвердить подлинность хостов, к которым подключаетесь через Ansible. Введите yes в диалоговом окне, а затем нажмите ENTER для подтверждения.

Когда вы получите от хоста ответ "pong" , это будет означать, что вы готовы запускать команды и плейбуки Ansible на этом сервере.

Шаг 4 — Запуск ситуативных команд (опционально)

Убедившись, что узел управления Ansible может взаимодействовать с хостами, вы можете запускать на серверах ситуативные команды и плейбуки.

Любая команда, обычно запускаемая на удаленном сервере через SSH, может быть запущена с помощью Ansible на серверах, заданных в файле инвентаризации. Например, вы можете проверить использования дисковых ресурсов всеми серверами с помощью следующей команды:

При желании вы можете заменить выделенную команду df -h любой другой командой.

Также вы можете запускать модули Ansible с помощью ситуативных команд, как мы это делали с модулем ping при тестировании подключения. Например, мы можем использовать модуль apt для установки последней версии vim на все серверы из файла инвентаризации:

Вы можете использовать команды Ansible как для отдельных хостов, так и для групп и подгрупп хостов. Например, вы можете проверить время uptime каждого хоста в группе servers с помощью следующей команды:

Начальная настройка Ubuntu Server 20.04 LTS после установки

Базовая настройка Ubuntu Server 20.04 после установки.

Подключаемся к серверу:

Учётная запись root

Можем убедится в том, что пароль для root пустой:

Учётная запись root по умолчанию

Так устроено в целях безопасности. Например, вы можете забыть что работаете от имени суперпользователя и удалить какие-либо важные вещи. Разработчики Ubuntu это учли и вообще отключили аккаунт суперпользователя.

Если всё же нужно авторизоваться от имени суперпользователя, необходимо установить для него пароль:

Затем нужно ввести два раза пароль. Проверим снова:

Учётная запись root

Важно! На рабочих серверах не делайте так. Так можно делать только на домашней машине для удобства.

Создание нового пользователя с административными правами

Добавляем в систему нового пользователя и предоставляем ему права администратора.

Система задаст несколько вопросов. Сначала она предложит ввести пароль для этой учетной записи.

Введите пароль и при желании заполните поля с дополнительной информацией. Это не обязательно, и вы можете просто нажать Enter , если хотите оставить поле пустым по умолчанию.

Проверим добавился ли пользователь john :

Добавление нового пользователя

Добавляем нового пользователя в группу sudo :

Сменим пользователя и проверим его права:

Поверка прав пользователя

Чтобы повысить уровень безопасности вашего сервера, мы настоятельно рекомендуем настроить ключи SSH вместо использования аутентификации по паролю. Мы это сделаем чуть позже, а пока настроим брандмауэр (фаервол) для корректной работы SSH-соединений.

Настройка брандмауэра

OpenSSH in UFW

Разрешим SSH-соединения, чтобы иметь возможность подключиться в следующий раз:

Allow OpenSSH in UFW

И опять проверяем статус:

OpenSSH enable in UFW

Теперь можно настроить аутентификацию на основе SSH-ключей.

Аутентификация пользователя на основе SSH-ключей

Этот шаг не обязателен, но он значительно повысит безопасность вашего сервера. Поэтому, рекомендуем его не пропускать.

Для начала сгенерируем SSH ключ с помощью команды (не забудьте отключиться от сервера, команду запускаем на локальной машине!):

Путь для расположения ключа можно оставить стандартным. Можно придумать и ввести passphrase (секретная фраза). Или же просто оставить всё по умолчанию, нажимая Enter :

ssh-keygen

Теперь этот ключ нужно скопировать на сервер. В Windows придётся копировать ключ вручную. Займёмся этим.

Подключаемся к серверу:

В корневой директории созданного пользователя (/home/john) нужно создать папку .ssh . Скорее всего вы уже находитесь в этой директории. Проверить это можно с помощью команды:

Если вы находитесь в другой директории, то перейдем в нужную нам с помощью команды:

Здесь создадим директорию .ssh :

Проверить создание директории и просмотреть структуру текущей директории:

mkdir .ssh

Установим права для этой папки:

Перейдем в эту папку:

Создадим файл authorized_keys в этой директории:

Установим права для этого файла:

Курсор передвинется на новою строку в ожидании ввода данных от вас:

authorized_keys

Переходим в папку на локальном компьютере, куда был сгенерирован ключ и с помощью любого текстового редактора открываем файл id_rsa.pub . Копируем весь текст из этого файла. Копируйте внимательно, без захвата пробелов в начале и в конце строки!

Вставляем ключ, который скопировали из файла id_rsa.pub и вводим команду:

Отлично, мы скопировали и вставили наш ключ в файл authorized_keys . Можно проверить содержимое файла командой:

cat authorized_keys

Теперь при подключении к серверу по SSH, пароль для подключения запрашиваться не будет.

Редактируем конфиг SSH

Откроем для редактирования конфигурационный файл SSH:

Находим строчку PubkeyAuthentication . Раскомментируем её. Так мы активируем возможность авторизации с помощью SSH-ключа:

Находим строчку PasswordAuthentication . Раскомментируем ее и выставим значение no. Так мы запретим авторизацию по паролю:

В самом конце файла с новой строчки вставим команду:

Сохраняем файл и выходим из редактора. Перезапускаем SSH:

Теперь если попытаться авторизоваться под root или каким-либо другим пользователем, то сервер выдаст ошибку доступа.

На этом начальная настройка Ubuntu Server 20.04 завершена. В следующей заметке установим стек LAMP.

Читайте также: