Найти в Дзене
Цифровая Переплавка

Сервер, в который нельзя зайти: почему отказ от SSH — не безумие, а логичный шаг вперёд

Фраза «я больше не могу зайти на сервер по SSH» у любого администратора вызывает почти физический дискомфорт. Это как сказать пилоту, что в самолёте больше нет штурвала. Но именно с этого начинается история Thomas Letan, который сознательно закрыл себе SSH-доступ — и оказался в куда более устойчивой и предсказуемой инфраструктурной реальности. На первый взгляд звучит как радикализм. На деле — это аккуратно выстроенная философия неизменяемой (immutable) инфраструктуры, доведённая до логического конца. Классический сервер — это «питомец»: Подход Томаса — это сервер как одноразовый артефакт: SSH в этой модели — не инструмент, а запах архитектуры. Ключевая идея — всё описывается декларативно и применяется автоматически. Для этого используется связка, которая на удивление хорошо сочетается без Kubernetes. В итоге сервер перестаёт быть «местом», а становится исполняемым описанием. Самый важный поворот в этой истории — осознание, что: Это мышление очень похоже на функциональное программирован
Оглавление

Фраза «я больше не могу зайти на сервер по SSH» у любого администратора вызывает почти физический дискомфорт. Это как сказать пилоту, что в самолёте больше нет штурвала. Но именно с этого начинается история Thomas Letan, который сознательно закрыл себе SSH-доступ — и оказался в куда более устойчивой и предсказуемой инфраструктурной реальности.

На первый взгляд звучит как радикализм. На деле — это аккуратно выстроенная философия неизменяемой (immutable) инфраструктуры, доведённая до логического конца.

🧱 Сервер как артефакт, а не как питомец

Классический сервер — это «питомец»:

  • 🐕 за ним ухаживают
  • 🩹 его чинят руками
  • 🧠 он хранит контекст в голове администратора

Подход Томаса — это сервер как одноразовый артефакт:

  • 📦 если нужно изменить поведение — создаётся новый образ
  • 🔁 если что-то пошло не так — сервер уничтожается и поднимается заново
  • 🤖 если сервис обновился — он сам себя перезапускает

SSH в этой модели — не инструмент, а запах архитектуры.

⚙️ Стек, который сделал «сервер без SSH» возможным

Ключевая идея — всё описывается декларативно и применяется автоматически. Для этого используется связка, которая на удивление хорошо сочетается без Kubernetes.

  • 🧊 Fedora CoreOS — минимальная ОС, созданная для запуска контейнеров
  • 🔥 Ignition — механизм одноразовой инициализации на первом запуске
  • 📄 Butane — удобный YAML-слой поверх Ignition
  • 📦 Podman Quadlets — декларативное описание контейнеров через systemd
  • 🔁 Podman auto-update — автоматическое обновление контейнеров из registry
  • 🏗️ Terraform — создание и уничтожение VM как ресурса

В итоге сервер перестаёт быть «местом», а становится исполняемым описанием.

🧠 Момент, где всё «щёлкает»

Самый важный поворот в этой истории — осознание, что:

  • 🧩 Ignition запускается ровно один раз
  • ♻️ любое изменение — это новая VM, а не патч старой
  • 📤 деплой = публикация нового контейнерного образа

Это мышление очень похоже на функциональное программирование:

  • 📦 данные неизменяемы
  • 🔁 новое состояние создаётся, а не модифицируется
  • 🧪 воспроизводимость важнее «быстрого фикса»

Не случайно сам автор напрямую сравнивает CoreOS-машины с immutable-значениями в Haskell или OCaml.

🧩 Почему не Docker Compose, не Ansible и не Kubernetes

История особенно ценна тем, что это осознанный отказ от популярных инструментов:

  • 🪛 Ansible
    🧠 сложно гарантировать, что «новая VM» и «обновление старой» дадут одинаковый результат
    🧱 плейбуки быстро превращаются в условный ад
  • 🐳 Docker Compose
    ⚠️ всё равно требует управляемой VM
    🔧 остаётся ручное администрирование
  • ☸️ Kubernetes
    🧠 слишком сложен для задач одного человека
    💸 управляемые кластеры убивают экономию

На этом фоне CoreOS + Quadlets выглядят как золотая середина: минимум магии, максимум предсказуемости.

🔄 Quadlets: systemd как оркестратор контейнеров

Ключевая техническая находка — Podman Quadlets.

Вместо shell-скриптов и ручного podman run:

  • 📄 описывается что должно существовать
  • 🧠 systemd сам генерирует юниты
  • 🔁 перезапуски, зависимости и порядок старта — бесплатны

Контейнеры можно объединять в pod, где они:

  • 🌐 делят сетевое пространство
  • 🔗 общаются через localhost
  • 🧩 ведут себя предсказуемо

Это не Kubernetes, но для малого продакшена — почти идеал.

🚫 И вот тут SSH становится лишним

Финальный пазл — Podman auto-updates:

  • 🏷️ контейнер помечается как auto-update из registry
  • ⏱️ таймер сам проверяет новые образы
  • 🔁 сервис обновляется без участия человека

В результате:

  • 🚀 деплой = docker push
  • ❌ ручной вход на сервер не нужен
  • 📦 сервер превращается в «чёрный ящик»

Это пугает ровно до того момента, пока не понимаешь:
если тебе нужен SSH — значит, система уже сломалась.

🧭 Личное мнение: это не для всех — и в этом сила

Такой подход:

  • ❌ не подходит для частых ручных экспериментов
  • ❌ требует дисциплины и IaC-мышления
  • ❌ болезненен для тех, кто «привык зайти и поправить»

Но он идеально подходит для:

  • 🧪 staging и production
  • 🌐 self-hosting без постоянного внимания
  • 🧠 инфраструктуры, где важнее воспроизводимость, чем гибкость

SSH здесь — как printf в продакшене: иногда нужен, но лучше, чтобы не понадобился.

🔭 Что дальше

Сам автор честно признаёт:
сервер без SSH — это
чёрный ящик, и следующий логичный шаг — наблюдаемость.

  • 📊 метрики
  • 🧾 логи
  • 🧠 трассировка
  • 🔭 OpenTelemetry

И это, пожалуй, самый зрелый финал всей истории:
мы не убираем контроль — мы
переносим его на более высокий уровень абстракции.

🔗 Ссылки

Инфраструктура без SSH — это не отказ от контроля.
Это признание того, что
ручное вмешательство — худший из возможных API.