Установка и настройка cloud-init в Ubuntu

    Команда Simple-Server
    03.06.2026
    8 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    В большинстве образов Ubuntu cloud-init уже предустановлен.

    В Simple-Server все образы Ubuntu уже содержат в себе cloud-init.

    Также компания Canonical (разработчик дистрибутива Ubuntu) выпускает образы под названием Ubuntu Cloud Images, специально подготовленные и оптимизированные для запуска в облачных средах.

    Дополнительно проверить наличие cloud-init можно при помощи команды:

    Если команда отразила версию, как на скриншоте выше, то cloud-init уже установлен в системе. Если же в ответ была возвращена фраза Command cloud-init not found , необходимо выполнить установку утилиты:

    apt update && apt -y install cloud-init

    После установки cloud-Init будет автоматически запускаться при каждой загрузке системы. Также стоит отметить что cloud-init запускается до подключения сервера к сети.

    Структура конфигурационных файлов

    Все конфигурационные файлы cloud-init находятся в директории /etc/cloud/:

    • /etc/cloud/clean.d/ — каталог для скриптов очистки. Эти скрипты выполняются, когда запускается команда cloud-init clean.

    • /etc/cloud/cloud.cfg — главный конфигурационный файл. Здесь задаются настройки по умолчанию для всех этапов инициализации.

    • /etc/cloud/cloud.cfg.d/ — директория для пользовательских конфигурационных файлов с расширением .cfg. Файлы обрабатываются в алфавитном порядке и переопределяют настройки из основного файла. Это предпочтительное место для ваших кастомных настроек.

    • /etc/cloud/templates/ — каталог содержит шаблоны, которые cloud-init использует для генерации системных файлов.

    • /var/lib/cloud/ — здесь хранятся кеш, данные и скрипты, сгенерированные во время выполнения cloud-init.

    /etc/cloud/clean.d/ — каталог для скриптов очистки. Эти скрипты выполняются, когда запускается команда cloud-init clean.

    /etc/cloud/cloud.cfg — главный конфигурационный файл. Здесь задаются настройки по умолчанию для всех этапов инициализации.

    /etc/cloud/cloud.cfg.d/ — директория для пользовательских конфигурационных файлов с расширением .cfg. Файлы обрабатываются в алфавитном порядке и переопределяют настройки из основного файла. Это предпочтительное место для ваших кастомных настроек.

    /etc/cloud/templates/ — каталог содержит шаблоны, которые cloud-init использует для генерации системных файлов.

    /var/lib/cloud/ — здесь хранятся кеш, данные и скрипты, сгенерированные во время выполнения cloud-init.

    Модули в cloud-init — это отдельные исполняемые компоненты, которые выполняют конкретные задачи по настройке виртуальной машины при ее первом запуске. Каждый модуль отвечает за свою область: настройку сети, создание пользователей, установку пакетов и т.д.

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

    • Init Stage (Этап инициализации): Происходит сразу после монтирования корневой файловой системы. Здесь выполняются модули, которые нужны для подготовки системы к основной конфигурации (например, монтирование дополнительных дисков).

    • Config Stage (Этап конфигурации): Основной этап, на котором выполняется большая часть модулей: настройка сети, установка пакетов, настройка SSH-ключей, создание пользователей.

    • Final Stage (Финальный этап): Здесь запускаются модули для выполнения задач, которые должны произойти в самом конце, например, отправка уведомления о готовности системы или запуск пользовательских скриптов.

    Init Stage (Этап инициализации): Происходит сразу после монтирования корневой файловой системы. Здесь выполняются модули, которые нужны для подготовки системы к основной конфигурации (например, монтирование дополнительных дисков).

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

    Final Stage (Финальный этап): Здесь запускаются модули для выполнения задач, которые должны произойти в самом конце, например, отправка уведомления о готовности системы или запуск пользовательских скриптов.

    Локальное использование cloud-init

    Для начала протестируем cloud-init локально, то есть выполним его уже после запуска сервера. Мы создадим два сценария:

    • Первый сценарий создаст нового пользователя с именем new-admin. Пользователю будет задан пароль и выданы права администратора.

    • Второй сценарий установит пакеты atop, tree, net-tools.

    Первый сценарий создаст нового пользователя с именем new-admin. Пользователю будет задан пароль и выданы права администратора.

    Второй сценарий установит пакеты atop, tree, net-tools.

    1. Так как для создаваемого пользователя мы будем использовать пароль, нам необходимо сгенерировать его хеш — по умолчанию все пароли (и любые другие секреты) указываются в явном виде. Для получения хеша установим пакет whois, который содержит в себе утилиту mkpasswd:

    2. Запускаем утилиту, указав алгоритм хеширования sha-512:

    mkpasswd -m sha-512 --stdin

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

    Копируем хеш, который мы будем использовать далее.

    1. Как мы отмечали ранее, пользовательские конфигурационные файлы хранятся в директории /etc/cloud/cloud.cfg.d. Создаем в ней новый файл 99-new-admin-config.cfg:
    nano /etc/cloud/cloud.cfg.d/99-new-admin-config.cfg

    Используем следующее содержимое:

    #cloud-config users: - name: new-admin passwd: $6$BSAzGG4SFvsn//vD$ds8oM53OIs6qXiCIhMTl10bwQfe9u5WxGKADzwyPsODniGhYAXCUOAoyUkJLs.H9z0PxqLr7BxEJ18hT2VEyR/ sudo: ALL=(ALL) ALL shell: /bin/bash groups: sudo
    1. Проверим синтаксис на наличие ошибок:
    cloud-init schema --config-file /etc/cloud/cloud.cfg.d/99-new-admin-config.cfg

    Если ошибок нет, то команда вернет Valid schema.

    1. Перед тем как запустить скрипт, очистим конфигурацию при помощи команды:

    2. Запускаем конфигурацию:

    cloud-init single --name users-groups --file /etc/cloud/cloud.cfg.d/99-new-admin-config.cfg
    1. После того как новая конфигурация была применена, проверим наличие пользователя new-admin:

    2. Далее установим пакеты. Создаем новый файл:

    nano /etc/cloud/cloud.cfg.d/99-install-packages.cfg

    Используем следующее содержимое:

    #cloud-config package_update: true package_upgrade: true packages: - atop - tree - net-tools
    1. Проверим синтаксис на наличие ошибок:
    cloud-init schema --config-file /etc/cloud/cloud.cfg.d/99-install-packages.cfg
    1. Запускаем скрипт для установки пакетов при помощи команды:
    cloud-init single --name package_update_upgrade_install --file /etc/cloud/cloud.cfg.d/99-install-packages.cfg
    1. Проверяем наличие установленных пакетов:
    dpkg -l | grep -E "atop|tree|net-tools"

    Использование cloud-init в Simple-Server

    Облачные серверы Simple-Server на ОС Linux поддерживают работу с cloud-init через панель управления. Настроить сценарии можно как в процессе заказа сервера, так и в дальнейшем при его использовании. Рассмотрим применение cloud-init на практике.

    Мы создадим сценарий, который:

    • Создаст нового пользователя с именем new-usr;

    • Настроит аутентификацию по SSH ключам для пользователя new-usr;

    • Установит два пакета — mc, ncdu;

    • Поменяет имя хоста на Simple-Server-cloud-server;

    • Создаст файл test-file.txt в директории /tmp.

    Создаст нового пользователя с именем new-usr;

    Настроит аутентификацию по SSH ключам для пользователя new-usr;

    Установит два пакета — mc, ncdu;

    Поменяет имя хоста на Simple-Server-cloud-server;

    Создаст файл test-file.txt в директории /tmp.

    Если на сервере уже запускались какие-либо скрипты cloud-init, то перед запуском приведенной ниже конфигурации необходимо выполнить команду cloud-init clean.

    Наш сценарий будет выполняться при создании виртуального сервера — его можно добавить на шаге 7:

    1. Так как для нового пользователя будет использоваться аутентификация по SSH-ключам, необходимо заранее их сгенерировать. Для этого на другом устройстве (можно использовать домашний компьютер под управлением Windows, macOS, Linux) выполняем команду в терминале для создания ключей:

    Сохраняем ключи в директорию по умолчанию (скрытая директория .ssh в домашнем каталоге текущего пользователя). Далее необходимо получить значение открытого ключа (файл с расширением .pub):

    cat ~/.ssh/id_ed25519.pub

    Здесь id_ed25519.pub — это имя файла с открытым ключом. Не забудьте заменить имя на свое.

    1. Возвращаемся в панель управления и в блоке cloud-init прописываем следующий синтаксис:
    #cloud-config packages: - mc - ncdu users: - name: "new-usr" groups: sudo shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] ssh_authorized_keys: - ssh-rsa AAAAC3NzaC1lZDI1NTE5AAAAIFoUTI5BKDBDgKLIMpM71m/YI7dTtFKQiSIivRk9pUbs alex@DESKTOP-VTUJHJ9 lock_passwd: true hostname: Simple-Server-cloud-server preserve_hostname: false runcmd: - [touch, /tmp/test-file.txt]

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

    1. Для завершения заказа сервера нажимаем на кнопку «Заказать».

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

    Проверка установленных пакетов:

    dpkg -l | grep -E "mc|ncdu"

    Проверка наличия созданного файла:

    ls -lah /tmp/test-file.txt

    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны