Ansible · 7 min read · Dec 19, 2025

Как установить и настроить Ansible на Ubuntu 20.04

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

Ansible не требует установки какого-либо специального программного обеспечения на узловых серверах и может управлять ими по SSH.

В этом руководстве мы научимся устанавливать и настраивать Ansible на сервере Ubuntu 20.04.

Предварительные требования

  • Две или более серверных систем на базе Ubuntu 20.04 с установленным OpenSSH сервером.
  • Как сервер, так и узлы доступны по публичным IP-адресам.
  • Непривилегированный пользователь с правами sudo, настроенный на сервере Ansible, и пользователь root с установленным паролем на клиентах Ansible.

Установка Ansible

Официальный репозиторий Ansible не поддерживает Ubuntu 20.04 из-за ошибки в библиотеке python Ubuntu на момент написания этого руководства.

К счастью, Ubuntu поставляется с Ansible 2.9, который мы и установим. Выполните следующую команду для установки Ansible.

$ sudo apt install ansible -y

Проверьте вашу установку, выполнив следующую команду.

$ ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/username/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]

Настройка файла инвентаря

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

В зависимости от того, сколько серверов вы хотите контролировать, файл инвентаря 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 и ENTER, чтобы подтвердить ваши изменения.

Примечание: Вы также можете создать свой собственный файл инвентаря в любом месте по вашему выбору, который затем можно передать, используя параметр -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

Настройка 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 в этом руководстве.

Проверка соединения

После настройки файла инвентаря и 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, чтобы подтвердить.

Выполнение некоторых базовых команд

Давайте выполним несколько базовых команд на серверах с помощью Ansible. Для выполнения любой команды на сервере используется следующий формат.

$ ansible all -a "command" -u 

Проверка использования диска

Сначала давайте проверим использование диска на всех наших серверах.

$ ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  624K  798M   1% /run
/dev/vda1       155G  2.3G  153G   2% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M  608K  394M   1% /run
/dev/vda1        78G  2.2G   76G   3% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0

Целевые отдельные хосты и группы

До сих пор мы выполняли команды на всех удаленных серверах одновременно. Но это не всегда так. Чтобы выполнить команду только на одном сервере, вы должны использовать следующий формат.

$ 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 OS.

Выполните следующую команду, чтобы обновить программное обеспечение на всех ваших серверах.

$ 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.

Чтобы обновить ваши серверы CentOS, вы можете использовать ту же команду, заменив apt на yum, а для серверов Fedora вы можете заменить apt на dnf.

Если вы используете пользователя 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.

Заключение

Это завершает наше руководство по установке и настройке Ansible на сервере на базе Ubuntu 20.04. Если у вас есть какие-либо вопросы, оставляйте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.