Что происходит на уровне операционной системы и сети при подключении по SSH?

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

Ответ

На сетевом уровне:

  1. Установка TCP-соединения на порт 22 (или кастомный):

    # Можно отследить с помощью tcpdump
    sudo tcpdump -i any port 22 -nn

    Происходит классическое трехэтапное рукопожатие (SYN, SYN-ACK, ACK).

  2. Протокол SSH:

    • Обмен версиями (клиент: SSH-2.0-OpenSSH_8.9, сервер: SSH-2.0-OpenSSH_8.2).
    • Key Exchange: Используется алгоритм вроде curve25519-sha256 для генерации общего сессионного ключа.
    • Аутентификация: Чаще всего по ключу. Клиент отправляет подписанный сессионный ключ своим приватным ключом. Сервер проверяет подпись против публичного ключа в ~/.ssh/authorized_keys.

На уровне ОС (сервер):

  1. Демон sshd (слушающий порт 22) принимает соединение и форкает дочерний процесс для обработки сессии.
  2. PAM (Pluggable Authentication Modules) может участвовать в аутентификации, если настроен.
  3. Создание сессии: После успешной аутентификации sshd создает псевдотерминал (PTY) через системный вызов pty() и запускает оболочку пользователя (bash/zsh).

Пример настройки с точки зрения безопасности (DevOps):

# /etc/ssh/sshd_config
Port 2222                          # Меняем стандартный порт
PermitRootLogin no                # Запрещаем root-логин
PasswordAuthentication no         # Только ключи
AllowUsers deploy admin          # Whitelist пользователей
UsePAM yes
ClientAliveInterval 300          # Отслеживание неактивных сессий

В инфраструктуре мы часто используем bastion-хосты для SSH-доступа, а все соединения логируем в централизованную систему (например, ELK-стек).