cloud-init для VPS: пользователи, SSH-ключи и базовая настройка
Как использовать cloud-init при создании VPS: пользователи, SSH-ключи, пакеты, firewall-подготовка, IPv6, repeatable setup и риски шаблонов.
Содержание
cloud-init позволяет создать VPS уже с пользователями, SSH-ключами и базовыми пакетами. Это особенно полезно при переносе между локациями и провайдерами.
Что автоматизировать
Автоматизируйте пользователей, публичные SSH-ключи, обновление пакетов, базовые утилиты и минимальные конфиги. Секреты и приватные ключи храните отдельно.
Root и SSH-ключи
Опишите sudo-пользователя и его ssh_authorized_keys. После старта проверьте вход и только потом применяйте жесткие правила sshd.
IPv4/IPv6 и firewall
cloud-init может подготовить пакеты UFW, но включать firewall надо аккуратно: правило SSH должно существовать до enable, а IPv6 нужно проверить отдельно.
systemd и Docker
Не превращайте userdata в огромный install script. Лучше установить зависимости, положить unit или compose и затем проверять статус через systemd и docker logs.
Диагностика запуска
Если ключ не применился, смотрите логи cloud-init, консоль провайдера и пользователя по умолчанию. Ошибка YAML может silently сломать ожидаемую настройку.
Перенос и репутация
Один и тот же cloud-init файл помогает поднять сервер в другой локации. Но IP-репутацию, доступность UDP и правила провайдера он не гарантирует — это проверяется отдельно.
Проверено на практике
- Дата проверки: 2026-05-12
- Среда: Ubuntu/Debian Linux, VPS-провайдеры с публичным IPv4/IPv6
- Версии: актуальная документация Ubuntu/Debian/OpenSSH/systemd/UFW на дату проверки
Мини-чеклист
- Добавить публичные SSH-ключи
- Создать sudo-пользователя
- Не хранить приватные ключи в userdata
- Проверить cloud-init logs
- Тестировать шаблон на новом VPS
Частые ошибки
- Класть секреты в cloud-init
- Писать длинный неидемпотентный script
- Забывать YAML-отступы
- Включать firewall без SSH allow
- Считать cloud-init заменой мониторинга
Источники и документация
FAQ
Где задаются SSH-ключи в cloud-init?
Обычно в ssh_authorized_keys для пользователя или через профиль провайдера, который cloud-init применяет при первом запуске.
Можно ли запускать установку Docker из cloud-init?
Можно, но для надежности лучше держать сценарий коротким и проверять результат после старта.
Почему cloud-init не применился повторно?
cloud-init обычно выполняет часть модулей при первом boot. Для повторного запуска нужны специальные команды и осторожность.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Оформить доступ