Ansible · 10 min read · Dec 20, 2025
Как установить и настроить Ansible на Ubuntu 22.04

Ansible — это очень популярный инструмент управления конфигурацией, предназначенный для упрощения процесса управления большим количеством серверов. Он может автоматизировать процесс настройки новых серверов и установки приложений с помощью одной команды или файла. Вы можете управлять любым количеством серверов и запускать процессы на них одновременно с одного узла. Ansible не требует установки какого-либо специального программного обеспечения на узлах сервера и может управлять ими через SSH.
В этом руководстве мы узнаем, как установить и настроить Ansible на сервере Ubuntu 22.04.
Предварительные требования
- Две или более серверных системы, работающих под управлением Ubuntu 22.04 с установленным сервером OpenSSH.
- Как сервер, так и узлы доступны через публичные IP-адреса.
- На сервере Ansible настроен пользователь без прав root с правами sudo, а на клиентах Ansible настроен пользователь root с паролем.
Шаг 1 - Установка Ansible
Мы будем использовать официальный репозиторий Ansible для установки его последней версии. Добавьте официальный репозиторий Ansible на сервер.
$ sudo add-apt-repository ppa:ansible/ansible
К счастью, Ubuntu поставляется с Ansible 2.9, который мы и установим. Выполните следующую команду для установки Ansible.
$ sudo apt install ansible -y
Проверьте вашу установку, выполнив следующую команду.
$ ansible --version
ansible [core 2.13.3rc1]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/navjot/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /home/navjot/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0]
jinja version = 3.0.3
libyaml = True
Установите и активируйте пакет python3-argcomplete, чтобы настроить поддержку автозаполнения Ansible в bash.
$ sudo apt install python3-argcomplete
$ sudo activate-global-python-argcomplete3
Теперь вы можете нажимать клавишу Tab, чтобы получить список опций для оболочки bash.
Шаг 2 - Настройка файла инвентаря
Чтобы иметь возможность подключаться к нескольким хостам, вам нужен файл, который будет записывать детали узлов. Этот файл называется файл инвентаря.
В зависимости от того, сколько серверов вы хотите контролировать, файл инвентаря Ansible также позволяет вам организовывать их в группы и подгруппы. Вы также можете установить пользовательские переменные, применимые к выбранным хостам или группам, которые могут быть использованы при передаче инструкций.
Ansible поставляется с файлом инвентаря по умолчанию, доступным по адресу /etc/ansible/hosts. Откройте его с помощью редактора Nano.
$ sudo nano /etc/ansible/hosts
Вставьте следующий код в конец файла.
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Секция servers определяет список узлов, к которым вы хотите подключиться. Вы можете создать столько групп, сколько необходимо, чтобы организовать серверы в несколько групп.
Группа all:vars устанавливает параметр ansible_python_interpreter для всех хостов в инвентаре. Это гарантирует, что Ansible использует исполняемый файл Python 3 вместо Python 2, который был удален из последних версий Ubuntu.
Когда вы закончите, сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено подтвердить изменения.
Примечание: Вы также можете создать свой файл инвентаря в любом месте по вашему выбору, который вы затем можете передать, используя параметр -i, выполняя команды Ansible.
Вы можете проверить свой список инвентаря с помощью следующей команды.
$ ansible-inventory --list -y
all:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
Организация серверов в группы и подгруппы
Это полезный совет, если у вас много серверов, некоторые из которых выполняют определенные функции. Например, вы можете использовать этот метод для группировки веб-серверов и серверов баз данных отдельно. Вы даже можете сделать хост частью нескольких групп. Чтобы достичь этого, ваш файл инвентаря должен выглядеть примерно так:
[webservers]
203.0.113.111
203.0.113.112
[dbservers]
203.0.113.113
server_hostname
[development]
203.0.113.111
203.0.113.113
[production]
203.0.113.112
server_hostname
Шаг 3 - Настройка SSH-ключей
Чтобы Ansible мог подключаться к серверам, вы должны настроить SSH-ключи между вашим сервером Ansible и хостами, указанными в файле инвентаря. Это будет работать только в том случае, если клиенты Ansible не имеют включенного публичного ключа и имеют включенный аккаунт root с паролем.
Используйте следующие шаги, чтобы создать и настроить SSH-ключ для Ansible и его узлов.
Создайте ключ для Ansible.
$ ssh-keygen -t rsa -b 4096 -C "Ansible key"
Скопируйте публичный ключ на ваши аккаунты на удаленных серверах. Для этого мы будем использовать команду ssh-copy-id.
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
Вот и все. Теперь Ansible должен иметь возможность общаться с вашими серверами.
Настройка SSH-ключей на узлах с существующим публичным ключом
Если клиенты уже имеют включенные публичные ключи, вам придется следовать определенным дополнительным шагам. Для этого вам нужно создать нового пользователя, доступного только для Ansible на каждом узловом сервере. Этот пользователь будет иметь права sudo, доступные без пароля, и может быть доступен только с вашего сервера Ansible.
Чтобы создать пользователя ansible, выполните следующую команду.
$ sudo adduser ansible
Выберите надежный пароль и оставьте все остальные поля пустыми.
Теперь настройте доступ к sudo без пароля для этого пользователя с помощью следующей команды.
$ echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible
Теперь, когда вы добавили и настроили нового пользователя, вы можете скопировать SSH-ключ с вашего сервера Ansible на узловой сервер с помощью следующей команды.
$ ssh-copy-id [email protected]
Вас попросят ввести пароль для пользователя ansible. Введите его, и SSH-ключ будет скопирован.
Затем отключите вход по паролю для пользователя ansible на узловом сервере.
$ sudo usermod -L ansible
Теперь ваш узловой сервер доступен только с сервера Ansible, так как только этот сервер имеет публичный ключ для него, и вы не можете использовать его с правами sudo на узловом сервере напрямую, так как вход по паролю отключен.
Вам придется повторить эти шаги для каждого узлового сервера. Также замените пользователя root на пользователя ansible в этом руководстве.
Шаг 4 - Проверка соединения
После настройки файла инвентаря и SSH-ключей мы должны проверить, может ли Ansible подключиться к серверам.
Введите следующую команду, чтобы проверить соединение. Эта команда протестирует соединение со всеми серверами из файла инвентаря.
$ ansible all -m ping -u root
Эта команда использует модуль ping Ansible для выполнения теста на подключение ко всем серверам. Вы должны получить вывод, похожий на следующий.
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Если это ваш первый раз, когда вы используете Ansible, вам будет предложено подтвердить подлинность всех серверов. Когда будет предложено, введите yes и нажмите ENTER, чтобы подтвердить.
Шаг 5 - Выполнение некоторых базовых команд
Давайте выполним несколько базовых команд на серверах с помощью Ansible. Чтобы выполнить любую команду на сервере, используется следующий формат.
$ ansible all -a "command" -u
Проверка использования диска
Сначала давайте проверим использование диска на всех наших серверах.
$ ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
tmpfs 198M 972K 197M 1% /run
/dev/sda2 50G 3.9G 44G 9% /
tmpfs 989M 0 989M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 198M 4.0K 198M 1% /run/user/1000
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
tmpfs 198M 922K 197M 1% /run
/dev/sda2 50G 4.9G 43G 10% /
tmpfs 989M 0 989M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 198M 4.0K 198M 1% /run/user/1000
Целевые отдельные хосты и группы
До сих пор мы запускали команды на всех удаленных серверах одновременно. Но это не всегда так. Чтобы выполнить команду только на одном сервере, вы должны использовать следующий формат.
$ ansible server1 -a "uptime" -u root
server1 | CHANGED | rc=0 >>
21:38:26 up 11 min, 2 users, load average: 0.00, 0.20, 0.19
Вышеуказанная команда проверяет время работы на server1 из группы инвентаря.
Вы также можете нацелиться на несколько серверов, используя следующий формат.
$ ansible server1:server2 -m ping -u root
Вы также можете нацелиться на группы или подгруппы из файла инвентаря напрямую.
$ ansible groupname -m ping -u
Обновление всех серверов
В этом руководстве мы предполагаем, что все удаленные серверы работают под управлением Debian или Ubuntu.
Выполните следующую команду, чтобы обновить программное обеспечение на всех ваших серверах.
$ ansible all -m apt -a "update_cache=yes upgrade=yes" -u root
Параметр -m определяет модуль, который Ansible должен запустить. Параметр -a относится к аргументам или командам для связанного модуля. Здесь мы используем модуль apt Ansible для обновления серверов, так же как мы использовали модуль ping в нашем последнем примере. Параметр update_cache обновляет кэш APT на сервере, а upgrade=yes говорит Ansible выполнить команду apt upgrade.
Если вы используете пользователя ansible, как указано выше, вам нужно изменить команду ansible, чтобы она выполнялась с повышенными правами sudo.
$ ansible server2 -m apt -a "update_cache=yes upgrade=yes" -K -b -u ansible
Здесь -K запрашивает пароль для повышения привилегий. -b выполняет операцию ansible с become, что позволяет вам быть другим пользователем. Оба параметра в сочетании позволяют ansible работать с повышенными правами sudo. Вам нужно будет использовать это для всех команд, которые требуют прав sudo.
Иногда некоторые из этих команд обновления могут потребовать перезагрузки, поэтому выполните следующую команду, чтобы перезагрузить все ваши серверы.
$ ansible all -a "reboot" -u root
Это были всего лишь некоторые из базовых команд, которые вы можете выполнять с помощью Ansible.
Шаг 6 - Введение в плейбуки
Вышеуказанные команды позволяют вам выполнять одноразовые задачи, но если вы хотите настроить несколько серверов или выполнить одну и ту же последовательность команд на нескольких серверах, вам нужно настроить плейбуки. Плейбуки — это файлы, написанные в YAML, и содержащие инструкции для автоматизации последовательности задач по настройке приложений и служб.
Теперь мы создадим плейбук для установки Nginx и настройки HTML-страницы на узле Ansible. Создайте каталог для Ansible в вашем домашнем каталоге.
$ mkdir ~/ansible
Создайте и откройте файл плейбука для редактирования.
$ cd ~/ansible
$ nano testplaybook.yml
Плейбуки используют формат YAML для определения одной или нескольких игр. Игра — это набор упорядоченных задач, организованных таким образом, чтобы автоматизировать процесс. Игры определяются как список YAML.
Первый шаг в определении игры — определить, какие хосты являются целевыми, используя директиву hosts: all. Директива become используется для указания того, что следующие задачи должны выполняться суперпользователем.
Мы определим три задачи: одну для добавления пользователя, одну для обновления всех пакетов и последнюю для установки сервера Nginx. Раздел vars плейбука используется для определения пользовательских переменных. Мы определяем две переменные: одну для пользователя, которого нужно добавить, и вторую для определения состояния пакета, который нужно установить. Чтобы использовать переменную, мы должны заключить имя переменной в двойные фигурные скобки.
Модуль ansible.builtin.user используется для добавления нового пользователя с правами sudo. Чтобы добавить пользователя, мы используем переменные name, password и group. Переменная group установлена в sudo, чтобы предоставить пользователю права суперпользователя. Вы не можете вставить пароль в открытом виде в файл плейбука, поэтому мы добавим SHA-хэшированный секрет. Мы используем утилиту mkpasswd для этого. Чтобы установить ее, выполните следующую команду для установки пакета whois.
$ sudo apt install whois
Сгенерируйте хэшированный пароль. Вам будет предложено ввести обычный пароль, и вы получите для него хэшированную строку. Запишите хэшированный ключ, чтобы использовать его в файле плейбука.
$ mkpasswd --method=sha-512
Password:
$6$dGbprm2oVqClDDDh$Epk6r5eXYkYBaQpQpP.H7VCdz0g9Aj0aO8hjy/WXq4WmfQ7GvQP2/cl/cNhd7.LRFuCKix9uCF2t8X5/Pv0Lk1
Директива update_cache обновляет список репозиториев системы, так же как команда apt update, а директива upgrade: dist говорит Ansible выполнить обновление системы. Третья задача является самоочевидной и устанавливает последнюю версию сервера Nginx.
Основываясь на информации, которую мы обсудили, вставьте следующий код в файл. Вставьте хэшированный ключ, который вы получили, в качестве значения для переменной password.
---
- name: Test playbook
hosts: all
become: true
vars:
state: latest
user: navjot
tasks:
- name: Add the user {{ user }}
ansible.builtin.user:
name: "{{ user }}"
password: '$6$dGbprm2oVqClDDDh$Epk6r5eXYkYBaQpQpP.H7VCdz0g9Aj0aO8hjy/WXq4WmfQ7GvQP2/cl/cNhd7.LRFuCKix9uCF2t8X5/Pv0Lk1'
group: sudo
- name: Upgrade all apt packages
apt:
update_cache: yes
upgrade: dist
- name: Install the {{ state }} of package "nginx"
apt:
name: "nginx"
state: "{{ state }}"
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено подтвердить изменения.
Чтобы выполнить плейбук, выполните следующую команду. Флаг --ask-become-pass запросит ваш пароль root для выполнения операции с повышенными правами.
$ ansible-playbook testplaybook.yml --ask-become-pass
Вы получите следующий вывод.
BECOME password:
PLAY [Test playbook] *************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [server1]
ok: [server2]
ok: [server3]
TASK [Add the user casablanca] *************************************************************************************
changed: [server3]
changed: [server2]
changed: [server1]
TASK [Upgrade all apt packages] ************************************************************************************
changed: [server1]
changed: [server2]
changed: [server3]
TASK [Install the latest of package "nginx"] ***********************************************************************
changed: [server3]
changed: [server2]
changed: [server1]
PLAY RECAP ***********************************************************************************************************
server1 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server2 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server3 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Это подтверждает, что ваш плейбук успешно выполнен.
Если вы используете пользовательский файл инвентаря, вам нужно будет указать местоположение файла в команде следующим образом.
$ ansible-playbook -i /etc/ansible/custominventory testplaybook.yml --ask-become-pass
Заключение
Это завершает наше руководство по установке и настройке Ansible на сервере Ubuntu 22.04. Если у вас есть какие-либо вопросы, оставляйте их в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.