Открыть сервис

Secure Shell

Secure Shell (SSH) — это сетевой протокол прикладного уровня, предназначенный для удалённого управления операционными системами и туннелирования TCP-соединений. Обеспечивает шифрование передаваемых данных, аутентификацию сторон и защиту от атак типа «человек посередине» (MITM). Работает поверх транспортного уровня, чаще всего поверх TCP-протокола (порт 22 по умолчанию).

История

Протокол SSH был разработан в 1995 году финским исследователем Тату Юлёненом (Tatu Ylönen) как ответ на уязвимости более ранних протоколов удалённого доступа — Telnet, rlogin и rsh, которые передавали данные в открытом виде, включая пароли. Первая версия, SSH-1, была выпущена как бесплатное программное обеспечение для академического и некоммерческого использования. К концу 1995 года SSH-1 получил широкое распространение в Unix-сообществах.

В 1996 году Юлёнен основал компанию SSH Communications Security, которая начала коммерциализацию протокола. В 1999 году появилась вторая версия протокола — SSH-2, разработанная рабочей группой IETF (Internet Engineering Task Force). Эта версия исправляла криптографические недостатки SSH-1, вводила более надёжные алгоритмы шифрования (например, AES) и механизмы проверки целостности данных. SSH-2 стал стандартом де-факто; в 2006 году он был опубликован как RFC 4251—4256.

В 1999 году разработчик OpenBSD Нильс Провос (Niels Provos) создал открытую реализацию OpenSSH, которая быстро вытеснила проприетарные версии благодаря лицензии BSD и активной поддержке сообщества. К середине 2000-х годов OpenSSH стал доминирующей реализацией SSH во всех Unix-подобных системах, включая Linux, macOS и FreeBSD.

Архитектура и принципы работы

Модель «клиент-сервер»

SSH работает по архитектуре «клиент-сервер». Клиент (например, программа ssh в Linux или PuTTY в Windows) инициирует соединение с SSH-сервером (демон sshd), который прослушивает порт 22. После установки TCP-соединения стороны проходят три этапа:

  1. Установка транспортного уровня — согласование версии протокола, выбор алгоритмов шифрования (например, AES-256-GCM), хеширования (HMAC-SHA2) и сжатия. Создаётся симметричный сеансовый ключ с помощью протокола Диффи — Хеллмана.
  2. Аутентификациясервер доказывает свою подлинность с помощью открытого ключа (обычно хранящегося в файле /etc/ssh/ssh_host_rsa_key). Клиент аутентифицируется одним из методов: пароль, открытый ключ, GSSAPI (Kerberos) или смарт-карта.
  3. Соединение — после успешной аутентификации открывается сессия, в рамках которой могут работать несколько каналов: интерактивный shell, передача файлов (SFTP, SCP), туннелирование портов.

Шифрование и безопасность

SSH использует асимметричное шифрование только на этапе аутентификации и обмена ключами. После этого весь трафик шифруется симметричными алгоритмами с сеансовым ключом, который генерируется заново для каждого соединения. Поддерживаются алгоритмы: RSA, DSA, ECDSA, Ed25519 (для ключей сервера) и AES, ChaCha20, 3DES (для шифрования данных).

Протокол защищён от атак повторного воспроизведения (replay attack) благодаря использованию уникальных идентификаторов сессии и временных меток. Версия SSH-2 также включает механизм проверки целостности пакетов (MAC — Message Authentication Code), что предотвращает модификацию данных в пути.

Классификация и реализации

Основные реализации

  • OpenSSH — самая распространённая открытая реализация, входящая в состав большинства дистрибутивов Linux, macOS, а также доступная для Windows через WSL или отдельные сборки. Разрабатывается проектом OpenBSD.
  • PuTTY — популярный SSH-клиент для Windows с графическим интерфейсом. Включает инструменты для передачи файлов (PSFTP, PSCP).
  • SSH Communications Security — коммерческая реализация от создателя протокола, используется в корпоративных средах.
  • Dropbear — легковесная реализация SSH, предназначенная для встраиваемых систем и устройств с ограниченными ресурсами (роутеры, IoT).
  • libssh — библиотека для разработки SSH-приложений на C.

Версии протокола

  • SSH-1 (1995) — устаревшая версия, не рекомендуется к использованию из-за уязвимостей (например, возможность внедрения вредоносных данных в поток шифрования).
  • SSH-2 (1999) — действующий стандарт, обязателен для всех современных реализаций. Обратная совместимость с SSH-1 не поддерживается.

Применение

Удалённое администрирование

Основное применение SSH — безопасный доступ к командной оболочке (shell) удалённого сервера. Администраторы Linux и Unix-систем используют SSH для выполнения команд, редактирования конфигурационных файлов, управления процессами и мониторинга. В Windows SSH-сервер встроен начиная с Windows 10 версии 1809 (October 2018 Update).

Передача файлов

SSH предоставляет два протокола для передачи файлов:

  • SCP (Secure Copy) — копирует файлы между хостами, используя SSH-туннель. Прост, но не поддерживает возобновление прерванных передач.
  • SFTP (SSH File Transfer Protocol) — полноценный протокол для управления файлами: навигация по каталогам, удаление, переименование, возобновление загрузки. Работает поверх SSH-соединения.

Туннелирование и проброс портов

SSH позволяет перенаправлять TCP-соединения через зашифрованный туннель. Выделяют три типа проброса портов:

  • Локальный проброс — порт на клиенте пересылается на удалённый сервер (например, ssh -L 8080:localhost:80 user@server).
  • Удалённый проброс — порт на сервере пересылается на клиент (например, ssh -R 8080:localhost:80 user@server).
  • Динамический проброс — создание SOCKS-прокси на клиенте (опция -D).

Это используется для доступа к внутренним ресурсам через NAT, обхода сетевых фильтров и шифрования трафика приложений, не поддерживающих шифрование.

Автоматизация и скрипты

SSH активно используется в DevOps-инструментах (Ansible, Terraform, Fabric) для удалённого выполнения задач. Ключевая аутентификация (без пароля) позволяет автоматизировать развёртывание и конфигурацию серверов.

Интересные факты

  • Порт 22 для SSH был выбран Тату Юлёненом произвольно — это был номер его комнаты в общежитии университета.
  • В 2008 году исследователи обнаружили уязвимость в протоколе SSH-1, позволявшую извлечь сеансовый ключ за 2^63 операций, что сделало версию SSH-1 полностью небезопасной.
  • OpenSSH входит в состав операционной системы OpenBSD, где разрабатывается с особым вниманием к безопасности — код проходит аудит и тестирование на устойчивость к атакам.
  • В 2023 году в OpenSSH была добавлена поддержка постквантовой криптографии — алгоритма Kyber (ML-KEM) для защиты от будущих квантовых компьютеров.
  • SSH может использоваться для шифрования X11-сессий (удалённый графический интерфейс) через опцию -X.

Критика и ограничения

  • Сложность настройки — для начинающих пользователей конфигурация ключей и сертификатов может быть нетривиальной.
  • Отсутствие встроенного управления сессиями — SSH не предоставляет механизмов для одновременного управления множеством сессий (требуются внешние инструменты, например, tmux или screen).
  • Уязвимости в реализации — несмотря на безопасность протокола, в реализациях (особенно OpenSSH) периодически находят ошибки, такие как CVE-2024-6387 (уязвимость race condition в OpenSSH 9.8, позволявшая выполнение кода без аутентификации).
  • Проблемы с аутентификацией по паролю — пароли могут быть перехвачены или подобраны; рекомендуется использовать ключи или двухфакторную аутентификацию.

Источники

  • RFC 4251 — The Secure Shell (SSH) Protocol Architecture
  • RFC 4252 — The Secure Shell (SSH) Authentication Protocol
  • RFC 4253 — The Secure Shell (SSH) Transport Layer Protocol
  • OpenSSH Project — официальная документация
  • SSH Communications Security — история и технические спецификации
  • Документация PuTTY — руководство пользователя

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →