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

SSH

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

История

Предпосылки создания

До середины 1990-х годов для удалённого доступа к командной оболочке Unix использовались протоколы Telnet, rlogin и rsh. Все они передавали данные, включая пароли, в открытом виде, что делало их уязвимыми для перехвата трафика (сниффинга) и атак типа «человек посередине» (MITM). С ростом популярности интернета и увеличением числа удалённых атак возникла острая необходимость в шифрованном аналоге.

Разработка SSH-1

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

SSH-2 и стандартизация

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

OpenSSH

В 1999 году разработчики проекта OpenBSD создали свободную реализацию OpenSSH (OpenBSD Secure Shell) на основе последней версии SSH-1 с патчами, а затем — полностью независимую реализацию SSH-2. OpenSSH стала стандартной клиент-серверной программой в большинстве дистрибутивов Linux, macOS, FreeBSD и других Unix-подобных ОС. В 2000-х годах OpenSSH была портирована на Windows (через Cygwin, а затем — в составе Windows 10 и Windows Server 2019 как встроенный компонент).

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

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

SSH работает по модели «клиент-сервер». На управляемом устройстве запускается серверная часть (sshd), которая прослушивает TCP-порт 22 по умолчанию. Клиент (ssh) инициирует соединение, после чего происходит согласование параметров шифрования и аутентификация.

Этапы установки соединения

  1. Согласование версий протокола. Клиент и сервер обмениваются идентификаторами версий (например, SSH-2.0-OpenSSH_9.0).
  2. Ключевой обмен (Key Exchange). Стороны договариваются об алгоритмах шифрования, хеширования и сжатия. Используется протокол Диффи — Хеллмана (DH) или его эллиптическая версия (ECDH) для генерации общего сеансового ключа.
  3. Аутентификация сервера. Сервер доказывает свою подлинность с помощью открытого ключа хоста (host key). Клиент проверяет, что этот ключ совпадает с известным (обычно хранится в файле ~/.ssh/known_hosts). При первом подключении клиент выводит предупреждение и предлагает сохранить ключ.
  4. Аутентификация клиента. Сервер проверяет подлинность клиента одним из методов: по паролю, по открытому ключу, через GSSAPI (Kerberos) или с использованием сертификатов.
  5. Установка защищённого канала. После успешной аутентификации все данные между клиентом и сервером передаются в зашифрованном виде.

Порт и протоколы

По умолчанию SSH использует TCP-порт 22, зарегистрированный в IANA. Протокол SSH-2 поддерживает несколько типов каналов:

  • shell — интерактивная командная оболочка;
  • exec — выполнение одной команды;
  • subsystem — запуск подсистемы (например, SFTP);
  • direct-tcpip — перенаправление TCP-порта;
  • forwarded-tcpip — обратное перенаправление порта.

Методы аутентификации

Аутентификация по паролю

Классический метод, при котором пароль передаётся в зашифрованном виде. Уязвим к атакам перебора (brute force), поэтому на современных серверах часто отключается в пользу ключей.

Аутентификация по открытому ключу

Наиболее распространённый и безопасный метод. Клиент генерирует пару ключей: приватный (секретный) и публичный (открытый). Публичный ключ копируется на сервер в файл ~/.ssh/authorized_keys. При подключении сервер проверяет, что клиент владеет соответствующим приватным ключом (с помощью цифровой подписи). Поддерживаемые алгоритмы: RSA, DSA, ECDSA, Ed25519.

Аутентификация через сертификаты

Расширение метода открытых ключей, при котором сертификаты подписываются центром сертификации (CA). Позволяет централизованно управлять доступом без копирования ключей на каждый сервер.

GSSAPI (Kerberos)

Используется в корпоративных средах с единой системой аутентификации (например, Active Directory). Позволяет входить на сервер без ввода пароля, используя билеты Kerberos.

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

Локальное перенаправление

Клиент перенаправляет TCP-соединение с локального порта на удалённый сервер через SSH-туннель. Пример: ssh -L 8080:example.com:80 user@server — трафик, идущий на локальный порт 8080, шифруется и направляется через сервер к example.com:80.

Удалённое перенаправление

Сервер перенаправляет соединение с удалённого порта на локальный клиент. Используется для доступа к ресурсам за NAT.

Динамическое перенаправление (SOCKS-прокси)

Клиент создаёт SOCKS5-прокси на локальном порту. Все приложения, настроенные на использование этого прокси, отправляют трафик через SSH-туннель. Команда: ssh -D 1080 user@server.

Реализации

OpenSSH

Основная и наиболее распространённая реализация. Входит в состав OpenBSD, Linux, macOS, FreeBSD, NetBSD, Solaris. Для Windows доступна в виде порта (OpenSSH for Windows, начиная с Windows 10 1809). Поддерживает все основные функции SSH-2, SFTP, SCP, туннелирование, а также протокол SSH-1 (отключён по умолчанию).

Dropbear

Лёгкая реализация SSH для встраиваемых систем и устройств с ограниченными ресурсами (OpenWrt, DD-WRT). Не поддерживает SFTP (только SCP), имеет урезанный набор алгоритмов.

PuTTY

Популярный SSH-клиент для Windows, разработанный Саймоном Тэтхемом. Включает графический интерфейс, поддержку туннелирования, агента ключей (Pageant). Не включает серверную часть.

libssh и libssh2

Библиотеки для разработчиков, предоставляющие API для интеграции SSH в приложения. libssh используется в KDE, GNOME, libssh2 — в curl, Git, OpenSSH (для SFTP).

Применение

Администрирование серверов

Основное использование: удалённый вход на серверы Linux/Unix для выполнения команд, настройки, мониторинга, обновления. SSH является стандартным инструментом для DevOps-инженеров и системных администраторов.

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

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

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

SSH используется для обхода межсетевых экранов, доступа к ресурсам в закрытых сетях, шифрования трафика приложений (например, почтовых клиентов, баз данных).

Автоматизация и DevOps

SSH-ключи используются в системах непрерывной интеграции (CI/CD) для развёртывания кода на серверы. Ansible, Puppet, Chef, SaltStack используют SSH для управления конфигурацией.

Git и другие VCS

Протокол Git поверх SSH является стандартным способом аутентифицированного доступа к удалённым репозиториям (например, на GitHub, GitLab, Bitbucket).

Безопасность

Уязвимости

  • CVE-2008-0166 — уязвимость в Debian OpenSSL (2006–2008), из-за которой генерировались предсказуемые ключи SSH. Привела к массовой перегенерации ключей.
  • CVE-2018-15473 — уязвимость в OpenSSH до 7.7, позволяющая перебором определять существование пользователей на сервере.
  • CVE-2023-38408 — уязвимость в OpenSSH до 9.3, связанная с переполнением буфера в агентском протоколе.

Рекомендации по усилению

  • Отключение аутентификации по паролю (PasswordAuthentication no).
  • Использование ключей Ed25519 как более безопасных и быстрых.
  • Отключение протокола SSH-1 (Protocol 2).
  • Настройка Fail2ban для блокировки IP-адресов при многократных неудачных попытках.
  • Использование двухфакторной аутентификации (например, через Google Authenticator).
  • Ограничение доступа по IP (AllowUsers, AllowGroups).
  • Регулярное обновление OpenSSH до актуальной версии.

Критика и альтернативы

Критика

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

Альтернативы

  • Mosh (Mobile Shell) — протокол, работающий поверх UDP, устойчивый к разрывам соединения и изменениям IP-адреса. Использует SSH для аутентификации.
  • Teleport (Gravitational) — платформа для доступа к серверам с использованием сертификатов и аудита сессий.
  • ZeroTier — VPN-решение, использующее шифрование на основе эллиптических кривых, но не заменяющее SSH полностью.
  • WebSSH — веб-интерфейсы для SSH (например, Apache Guacamole), позволяющие подключаться через браузер.

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

  • Первая версия SSH была написана Тату Юлёненом за две недели.
  • В 1999 году компания SSH Communications Security подала в суд на разработчиков OpenSSH за нарушение лицензионных соглашений, но дело было урегулировано во внесудебном порядке.
  • SSH-ключи могут быть использованы для автоматического входа в систему без ввода пароля, что делает их популярными в скриптах и системах CI/CD.
  • В 2023 году в OpenSSH была добавлена поддержка постквантовой криптографии (алгоритм NTRU Prime) для защиты от будущих квантовых атак.

Источники

  • RFC 4250–4256 (SSH Protocol Architecture, Authentication, Transport Layer, Connection Protocol)
  • Ylönen, T. (1996). «SSH — Secure Login Connections over the Internet». Proceedings of the 6th USENIX Security Symposium.
  • OpenSSH Project Documentation (https://www.openssh.com/manual.html)
  • Barrett, D. J., Silverman, R. E., Byrnes, R. G. (2005). «SSH: The Secure Shell: The Definitive Guide». O'Reilly Media.
  • CVE Database (MITRE) — уязвимости SSH

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

На главную BFOmetr →