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

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), что предотвращает модификацию данных в пути.

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

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

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

Применение

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

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

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

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

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

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

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

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

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

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

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

Источники

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

На главную BFOmetr →