Ответ
На сетевом уровне:
-
Установка TCP-соединения на порт 22 (или кастомный):
# Можно отследить с помощью tcpdump sudo tcpdump -i any port 22 -nnПроисходит классическое трехэтапное рукопожатие (SYN, SYN-ACK, ACK).
-
Протокол SSH:
- Обмен версиями (клиент:
SSH-2.0-OpenSSH_8.9, сервер:SSH-2.0-OpenSSH_8.2). - Key Exchange: Используется алгоритм вроде
curve25519-sha256для генерации общего сессионного ключа. - Аутентификация: Чаще всего по ключу. Клиент отправляет подписанный сессионный ключ своим приватным ключом. Сервер проверяет подпись против публичного ключа в
~/.ssh/authorized_keys.
- Обмен версиями (клиент:
На уровне ОС (сервер):
- Демон
sshd(слушающий порт 22) принимает соединение и форкает дочерний процесс для обработки сессии. - PAM (Pluggable Authentication Modules) может участвовать в аутентификации, если настроен.
- Создание сессии: После успешной аутентификации
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-стек).