Как использовать Ansible для базовой автоматизации управления VPS

В этой статье на примере Ubuntu/Debian разберём:

  • где устанавливать Ansible (и почему не обязательно ставить его на сервер);
  • как подключиться к VPS по SSH и проверить доступ;
  • как сделать inventory и выполнить первую проверку ping;
  • как запускать быстрые команды (ad-hoc) без playbook;
  • как написать первый playbook для обновлений и установки пакетов.

Важное: Ansible ставится на ваш компьютер, а не на VPS

Ansible работает по SSH и не требует агента на сервере. Обычно схема такая:

  • локальный компьютер (control node) — где установлен Ansible;

  • VPS (managed node) — куда Ansible подключается по SSH и выполняет задачи.

Почему так проще: не нужно ставить Ansible на каждый сервер, следить за версиями и зависимостями. На VPS достаточно SSH и Python.

Шаг 1. Проверяем SSH-доступ к VPS

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

ssh admin@IP_ВАШЕГО_VPS

Если у вас нестандартный порт (например 22222):

ssh -p 22222 admin@IP_ВАШЕГО_VPS

Если SSH не подключается: Ansible тоже не подключится. Сначала чините SSH (ключи, порт, UFW), потом автоматизацию.

Проверка SSH-доступа к VPS перед использованием Ansible

Шаг 2. Установка Ansible на локальном компьютере

Дальше всё делаем на своём компьютере (или на отдельной машине для управления), не на VPS.

Ubuntu/Debian (на локальной машине)

sudo apt update
sudo apt install -y ansible

Проверка версии

ansible --version

Если команда не найдена: значит Ansible не установлен на вашей машине. На VPS это обычно не лечится — ставить надо именно локально, где вы запускаете Ansible.

Шаг 3. Inventory: описываем сервер

Inventory — это список серверов, которыми вы управляете. Создадим простую структуру в отдельной папке проекта.

mkdir -p ansible-vps
cd ansible-vps

Создаём файл hosts.ini:

nano hosts.ini

Пример (замените IP и порт на свои):

[vps]
my_vps ansible_host=83.220.165.21 ansible_user=admin ansible_port=22

Если SSH по ключам: обычно ничего дополнительно указывать не нужно — Ansible возьмёт ключ из стандартного SSH-агента/каталога. Если ключ нестандартный, его можно прописать отдельно (ниже будет пример).

Шаг 4. Проверка связи: ansible ping

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

ansible -i hosts.ini vps -m ping

Если всё ок, увидите:

my_vps | SUCCESS => {
  "changed": false,
  "ping": "pong"
}
Проверка подключения к VPS через ansible -m ping

Если что-то пошло не так: типовые причины

  • UNREACHABLE / Permission denied — неверный логин/пароль/ключ SSH или не тот порт.

  • Host key verification failed — SSH не доверяет ключу сервера. Зайдите на сервер обычным SSH и подтвердите fingerprint.

  • Python is not installed — на сервере нет Python (редко, но бывает на минимальных образах). Решение — установить Python на VPS (см. ниже).

Если на VPS нет Python (редкий случай)

На Ubuntu/Debian обычно Python уже есть. Но если нет — зайдите на VPS по SSH и выполните:

sudo apt update
sudo apt install -y python3

Ad-hoc команды: быстро выполнить одну задачу

Не всегда нужен playbook. Иногда достаточно выполнить одну команду на сервере.

Пример: узнать аптайм

ansible -i hosts.ini vps -a "uptime"

Пример: проверить диск

ansible -i hosts.ini vps -a "df -h"

Пример: обновить список пакетов (нужен sudo)

ansible -i hosts.ini vps -b -a "apt update"

-b означает выполнение с повышением прав (become, аналог sudo).

Первый playbook: обновления и установка пакетов

Теперь сделаем простой playbook, который:

  • обновит список пакетов;

  • установит базовые утилиты (например, curl, git, ufw);

  • по желанию сделает обновление пакетов.

Создаём файл setup.yml:

nano setup.yml

Вставляем:

- name: Basic VPS setup
  hosts: vps
  become: true

  tasks:
    - name: Update apt cache
      ansible.builtin.apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Install base packages
      ansible.builtin.apt:
        name:
          - curl
          - git
          - ufw
        state: present

    # Опционально: обновить пакеты (можно включать по ситуации)
    - name: Upgrade packages
      ansible.builtin.apt:
        upgrade: dist

Запуск playbook:

ansible-playbook -i hosts.ini setup.yml
Запуск ansible-playbook для базовой настройки VPS

Совет: если боитесь обновлений, временно закомментируйте блок Upgrade packages. В бою обновления лучше делать осознанно.

Если нужен нестандартный SSH-ключ

Если у вас ключ не стандартный (не ~/.ssh/id_rsa и не ~/.ssh/id_ed25519), можно указать его в inventory:

[vps]
my_vps ansible_host=83.220.165.21 ansible_user=admin ansible_port=22 ansible_ssh_private_key_file=~/.ssh/my_key

Либо передать ключ через SSH-конфиг (часто это удобнее, чем плодить параметры в inventory).

Итоги

  • Поняли, что Ansible ставится на ваш компьютер, а VPS управляется по SSH.

  • Собрали простой inventory и проверили подключение через ansible -m ping.

  • Научились запускать ad-hoc команды и использовать -b для sudo.

  • Написали первый playbook для обновления и установки базовых пакетов.

Вывод: Ansible — это быстрый способ перестать делать рутину руками. Даже один playbook экономит время и снижает шанс ошибиться, особенно когда серверов становится больше одного.

Оставить комментарий