Вступление
Когда вы впервые создаете новый сервер Ubuntu 18.04, есть несколько шагов по настройке, которые вы должны предпринять на ранних этапах базовой установки. Это повысит безопасность и удобство использования вашего сервера, работая в качестве прочной основы для последующих действий.
Несмотря на то, что вы можете выполнить эти шаги вручную, автоматизация процесса сэкономит ваше время и уменьшит человеческие ошибки. Благодаря популяризации контейнерных приложений и микросервисов автоматизация серверов теперь играет важную роль в системном администрировании. Это также способ установить стандартные процедуры для новых серверов.
В этом руководстве объясняется, как использовать https://ansible.com [Ansible] для автоматизации шагов, содержащихся в наших https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 Руководство по первоначальной настройке сервера. Ansible - это современный инструмент управления конфигурацией, который можно использовать для автоматизации предоставления и настройки удаленных систем.
Предполетная проверка
Чтобы выполнить автоматическую настройку, представленную в книге игр, которую мы обсуждаем в этом руководстве, вам потребуется:
-
Ansible установлен на локальном компьютере или на удаленном сервере что вы настроили в качестве _ Ansible Control Node. Вы можете выполнить шаг 1 учебного руководства Как установить и настроить Ansible в Ubuntu 18.04, чтобы настроить это.
-
Корневой доступ к одному или нескольким серверам Ubuntu 18.04, которые будут управляться по Ansible.
Перед запуском playbook важно убедиться, что Ansible может подключиться к вашим серверам через SSH и запустить Ansible modules с помощью Python. В следующих двух разделах описано, как настроить инвентаризацию Ansible для включения ваших серверов и как запустить специальные команды Ansible для проверки подключения и действительных учетных данных.
Файл инвентаря
Inventory file содержит информацию о хостах, которыми вы будете управлять с помощью Ansible. Вы можете включить от одного до нескольких сотен серверов в свой файл инвентаризации, и хосты могут быть организованы в группы и подгруппы. Файл инвентаря также часто используется для установки переменных, которые будут действительны только для определенных хостов и групп, чтобы использоваться в книгах воспроизведения и шаблонах. Некоторые переменные также могут влиять на способ запуска playbook, например, переменная + ansible_python_interpreter +
, которую мы увидим через минуту.
Чтобы просмотреть содержимое стандартного инвентаря Ansible, откройте файл + / etc / ansible / hosts +
с помощью выбранного редактора командной строки на локальном компьютере или на узле управления Ansible:
sudo nano /etc/ansible/hosts
Файл инвентаризации по умолчанию, предоставляемый установкой Ansible, содержит несколько примеров, которые вы можете использовать в качестве ссылок для настройки инвентаризации. В следующем примере определяется группа с именем * server *, в которой находятся три разных сервера, каждый из которых идентифицируется по своему псевдониму: * server1 *, * server2 * и * server3 *:
/ и т.д. / анзибль / хостов
[servers]
server1 ansible_host=
server2 ansible_host=
server3 ansible_host=
[servers:vars]
ansible_python_interpreter=/usr/bin/python3
Подгруппа + server: vars +
устанавливает параметр хоста + ansible_python_interpreter +
, который будет действителен для всех хостов, входящих в группу + servers +
. Этот параметр гарантирует, что удаленный сервер использует + / usr / bin / python3 +
Python 3 вместо + / usr / bin / python +
(Python 2.7), которого нет в последних версиях Ubuntu.
Чтобы завершить настройку файла инвентаризации, замените выделенные IP-адреса IP-адресами ваших серверов. Когда вы закончите, сохраните и закройте файл, нажав + CTRL + X +
, затем + y +
, чтобы подтвердить изменения, а затем + ENTER +
.
Теперь, когда ваш файл инвентаризации готов, пришло время проверить подключение к вашим узлам
Тестирование подключения
После настройки файла инвентаризации для включения ваших серверов, пришло время проверить, может ли Ansible подключиться к этим серверам и запускать команды через SSH. В этом руководстве мы будем использовать учетную запись Ubuntu * root *, поскольку это обычно единственная учетная запись, доступная по умолчанию на вновь создаваемых серверах. Этот playbook создаст нового пользователя без полномочий root с привилегиями + sudo +
, который вы должны использовать при последующих взаимодействиях с удаленным сервером.
С вашего локального компьютера или узла управления Ansible запустите:
ansible -m ping all -u root
Эта команда будет использовать встроенный модуль + ping +
Ansible для запуска теста подключения на всех узлах из инвентаря по умолчанию, подключаясь как * корень *. Модуль + ping +
проверит: +, доступны ли хосты; + если у вас есть действительные учетные данные SSH; + если хосты могут запускать модули Ansible с использованием Python.
Если вместо аутентификации на основе ключей вы используете password-аутентификацию для подключения к удаленным серверам, вы должны предоставить дополнительный параметр + -k +
для команды Ansible, чтобы она запрашивала у вас пароль подключающегося пользователя. ,
ansible -m ping all -u root -k
Вы должны получить вывод, похожий на этот:
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Если вы впервые подключаетесь к этим серверам через SSH, вас попросят подтвердить подлинность хостов, к которым вы подключаетесь через Ansible. При появлении запроса введите + yes
, а затем нажмите` + Enter` для подтверждения.
Как только вы получите ответ «понг» от хоста, это означает, что вы готовы запускать команды Ansible и игровые книги на этом сервере.
Что делает этот Playbook?
Этот сборник пьес Ansible предоставляет альтернативу ручному запуску процедуры, описанной в Ubuntu 18.04 начальное руководство по настройке сервера и руководство по адресу https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-1804, где описывается настройка ключей SSH в Ubuntu 18.04].
Запуск этой пьесы приведет к выполнению следующих действий:
-
Административная группа * wheel * создается и затем настраивается для _ без пароля sudo _.
-
В этой группе создается новый административный пользователь с именем определяется переменной
+ create_user +
. -
Открытый ключ SSH копируется из местоположения, определенного переменной
+ copy_local_key +
и добавлен в файл + авторизованные_коды + для пользователя, созданного на предыдущем шаге. -
Проверка подлинности на основе пароля отключена для пользователя * root *.
-
Обновлен локальный индекс пакетов
+ apt +
и определены основные пакеты переменной+ sys_packages +
установлены. -
Брандмауэр UFW настроен на разрешение только SSH-соединений и запрещает любые другие запросы.
Для получения дополнительной информации о каждом из шагов, включенных в эту книгу, пожалуйста, обратитесь к нашей Ubuntu 18.04 начальной настройке сервера руководство.
После завершения воспроизведения книги вы сможете войти на сервер, используя только что созданную учетную запись + sudo +
.
Как использовать эту книгу
Для начала мы загрузим содержимое playbook на ваш Ansible Control Node. Это может быть либо локальный компьютер, либо удаленный сервер, на котором установлен Ansible и настроен ваш инвентарь.
Чтобы загрузить эту книгу из командной строки, вы можете использовать + curl +
:
curl -L https://raw.githubusercontent.com/do-community/ansible-playbooks/master/initial_server_setup/ubuntu1804.yml -o initial_server_setup.yml
Это загрузит содержимое книги воспроизведения в файл с именем + initial_server_setup.yml +
по вашему текущему локальному пути. Вы можете просмотреть содержимое книги воспроизведения, открыв файл в редакторе командной строки по своему выбору:
nano initial_server_setup.yml
Открыв файл playbook, вы должны заметить раздел с именем * vars * с тремя различными переменными, которые требуют вашего внимания:
-
* create_user : имя учетной записи пользователя без полномочий root для создания и предоставить привилегии sudo. В нашем примере используется *, но вы можете использовать любое имя пользователя.
-
* copy_local_key *: Локальный путь к действительному публичному ключу SSH для настройки в качестве авторизованный ключ для новой учетной записи не-root
+ sudo +
. Значение по умолчанию указывает на открытый ключ текущего локального пользователя, расположенный по адресу+ ~ / .ssh / id_rsa.pub +
. -
* sys_packages *: список основных системных пакетов, которые будут установлены используя менеджер пакетов
+ apt +
.
Когда вы закончите обновление переменных внутри + initial_server_setup.yml +
, сохраните и закройте файл.
Теперь вы готовы запустить эту книгу на одном или нескольких серверах. По умолчанию большинство playbooks настроено для выполнения на серверах «+ all » из вашего инвентаря. Мы можем использовать флаг ` -l `, чтобы удостовериться, что playbook затрагивает только подмножество серверов или один сервер. Чтобы выполнить playbook только на ` server1 +`, вы можете использовать следующую команду:
ansible-playbook initial_server_setup.yml
Вы получите вывод, похожий на этот:
Output
PLAY [all] ***************************************************************************************************************************************
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=9 changed=8 unreachable=0 failed=0
Когда выполнение playbook будет завершено, вы сможете войти на сервер с помощью:
ssh @
Не забудьте заменить пользователя, определенного переменной + create_user +
, именем хоста или IP-адресом вашего сервера.
В случае, если вы установили пользовательский открытый ключ с переменной + copy_local_key +
, вам нужно будет указать дополнительный параметр, указывающий местоположение его секретного ключа:
ssh @ -i
После входа на сервер вы можете проверить активные правила брандмауэра UFW, чтобы убедиться, что он правильно настроен:
sudo ufw status
Вы должны получить вывод, похожий на этот:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Это означает, что брандмауэр UFW успешно включен. Так как это было последнее задание в playbook, это подтверждает, что playbook был полностью выполнен на этом сервере.
Содержание Playbook
Начальную книгу настроек сервера можно найти в ansible-playbooks репозитории в https: // github. com / do-community [организация сообщества GitHub]. Чтобы скопировать или загрузить содержимое сценария напрямую, нажмите кнопку * Raw * в верхней части сценария или https://raw.githubusercontent.com/do-community/ansible-playbooks/master/initial_server_setup/ubuntu1804.yml[click здесь, чтобы просмотреть сырое содержимое напрямую.
Полное содержание также включено сюда для удобства:
initial_server_setup.yml
---
- hosts: all
remote_user: root
gather_facts: false
vars:
create_user:
copy_local_key: ""
sys_packages: [ ]
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: "{{ 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'
- name: Update apt
apt: update_cache=yes
- name: Install required system packages
apt: name={{ sys_packages }} 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 для автоматизации начальных задач, которые должны быть выполнены на новом сервере, таких как создание пользователя без полномочий root с доступом sudo, включение UFW и отключение удаленного входа в систему root.
Если вы хотите включить новые задачи в эту книгу для дальнейшей настройки первоначальной настройки сервера, обратитесь к нашему вводному руководству Ansible https://www.digitalocean.com/community/tutorials/configuration-management-101-writing-ansible -playbooks [Управление конфигурацией 101: Написание Ansible Playbooks].