Что происходит с момента включения сервера до момента, когда он готов принимать SSH-подключения?

«Что происходит с момента включения сервера до момента, когда он готов принимать SSH-подключения?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Firmware (BIOS/UEFI) – Выполняется самотестирование оборудования (POST). UEFI загружает свой загрузчик из ESP (EFI System Partition).

  2. Загрузчик – В моих системах это обычно GRUB2. Он загружает выбранное ядро Linux и initramfs (initial RAM filesystem) — временную корневую ФС с драйверами, необходимыми для монтирования реального корня.

  3. Ядро (Kernel) – Ядро распаковывается из образа, инициализирует CPU, память, драйверы устройств. Затем оно монтирует реальную корневую файловую систему (/) и выполняет /sbin/init (обычно это systemd).

  4. Init-система (systemd) – Это основной процесс (PID 1). Systemd монтирует файловые системы из /etc/fstab, активирует swap и запускает целевые юниты (targets).

    # Чтобы посмотреть, какие сервисы тормозят загрузку, я использую:
    systemd-analyze blame
    systemd-analyze critical-chain
  5. Запуск сетевых сервисов – Запускается systemd-networkd или NetworkManager для настройки сети. Затем systemd-resolved для DNS.

  6. Запуск SSH-демона – Systemd запускает юнит sshd.service. Демон SSH (sshd) загружает конфигурацию из /etc/ssh/sshd_config, генерирует host keys (если их нет) и начинает слушать порт 22 (или другой, указанный в конфиге).

  7. Готовность – Сервер теперь готов принимать подключения. Я проверяю это командой sudo systemctl status sshd и пытаюсь подключиться локально через ssh localhost.

Если SSH не поднимается, я смотрю логи: journalctl -u sshd -f или проверяю, не блокирует ли подключение firewall (sudo iptables -L или sudo firewall-cmd --list-all).