SSH («безопасная оболочка») — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и передачу файлов. Сходен по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования. SSH-клиенты и SSH-серверы имеются для большинства операционных систем.

SSH позволяет передавать через небезопасный канал практически любой другой сетевой протокол, таким образом, можно не только удаленно работать на компьютере через командную оболочку, но и передавать по шифрованному каналу звуковой поток или видео (например, с веб-камеры) Для этого используется Port Forwarding соединении TCP. Также, SSH может использовать сжатие передаваемых данных для последующей их шифрации, что удобно, например, для удаленного запуска клиентов X Window System.

Стандарты и программные реализации

Первая версия протокола, SSH-1, была разработана в 1995 году исследователем Tatu Yl’nen из Технологического университета Хельсинки, Финляндия. SSH-1 был написан для обеспечения большей конфиденциальности, чем протоколы rlogin, telnet и rsh. В 1996 году была разработана более безопасная версия протокола, SSH-2, уже несовместимая с SSH-1. Протокол приобрел еще большую популярность, и к 2000 году его использовало уже порядка двух миллионов пользователей.

В 2006 году протокол был утвержден рабочей группой IETF в качестве Интернет‐стандарта.

Однако, в некоторых странах (Франция, Россия, Ирак и Пакистан) до сих пор требуется специальное разрешение в соответствующих структурах для использования определенных методов шифрования, включая SSH. См. закон Российской Федерации «О федеральных органах правительственной связи и информации».

Распространены две реализации SSH: собственническая коммерческая, и бесплатная свободная. Свободная реализация называется OpenSSH. К 2006 году 80 % компьютеров Интернет использовало именно OpenSSH. Собственническая реализация разрабатывается организацией SSH Inc., http://www.ssh.com/ она бесплатна для некоммерческого использования. Эти реализации содержат практически одинаковый набор команд.
Существуют две версии протокола SSH: SSH-1 и SSH-2. В первой версии протокола есть существенные недостатки, поэтому в настоящее время SSH-1 практически нигде не применяется.

Многие взломщики сканируют сеть в поиске открытого порта SSH, особенно — адреса хостинг-провайдеров; обычно пытаясь подобрать пароль суперпользователя.

Протокол SSH-2 устойчив к атакам «man-in-middle», в отличие от протокола telnet. То есть, прослушивание трафика, «снифинг», ничего не дает злоумышленнику. Протокол SSH-2 также устойчив к атакам путем присоединения посредине (session hijacking) и обманом сервера имен (DNS spoofing).

Поддержка SSH реализована во всех UNIX‑подобных системах, и на большинстве из них в числе стандартных утилит присутствуют клиент и сервер ssh. Существует множество реализаций SSH-клиентов и для не-UNIX ОС. Большую популярность протокол получил после широкого развития анализаторов трафика и способов нарушения работы локальных сетей, как альтернативное небезопасному телнету решение для управления важными узлами.

SSH-серверы

  • OpenBSD: OpenSSH
  • Debian GNU/Linux: dropbear, lsh-server, openssh-server, ssh
  • MS Windows: freeSSHd, OpenSSH sshd, WinSSHD

SSH-клиенты и оболочки

  • Debian GNU/Linux: kdessh, lsh-client, openssh-client, putty, ssh
  • MS Windows и Windows NT: PuTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD
  • MS Windows Mobile: PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole
  • Mac OS: NiftyTelnet SSH
  • Symbian OS: PuTTY
  • Java: MindTerm, AppGate Security Server
  • J2ME: MidpSSH

Для работы по SSH нужен SSH-сервер и SSH-клиент. Сервер прослушивает соединения от клиентских машин и при установлении связи производит аутентификацию, после чего начинает обслуживание клиента. Клиент используется для входа на удаленную машину и выполнения команд.

Для соединения сервер и клиент должны создать пары ключей — открытых и закрытых — и обменяться открытыми ключами. Обычно используется также и пароль.

Рекомендации по безопасности использования SSH

  • Запрещение удаленного root-доступа.
  • Запрещение подключения с пустым паролем или отключение входа по паролю.
  • Выбор нестандартного порта для SSH-сервера.
  • Использование длинных SSH2 RSA-ключей (2048 бит и более). По состоянию на 2006 год система шифрования на основе RSA считалась надёжной, если длина ключа не менее 1024 бит.
  • Ограничение списка IP-адресов, с которых разрешен доступ. Например, настройкой файрвола.
  • Запрещение доступа с некоторых, потенциально опасных адресов.
  • Отказ от использования распространенных или широко известных системных логинов для доступа по SSH.
  • Регулярный просмотр сообщений об ошибках аутентификации.
  • Установка детекторов атак (IDS, Intrusion Detection System).
  • Использование ловушек, подделывающих SSH-сервис (honeypots).

Примеры использования SSH

Команда подключения к локальному SSH-серверу из командной строки GNU/Linux или FreeBSD для пользователя pacify (сервер слушает нестандартный порт 30000):

$ ssh -p 30000 pacify@127.0.0.1

Генерация пары SSH-2 RSA-ключей длиной 4096 бита программой puttygen
под UNIX‐подобными ОС:

$ puttygen -t rsa -b 4096 -o sample

Некоторые клиенты — например, PuTTY — имеют и графический интерфейс пользователя.

Для использования SSH в Python существуют модули вроде python-paramiko и python-twisted-conch.

Техническая информация о протоколе

SSH — это протокол прикладного уровня (или уровня приложений). SSH-сервер обычно слушает соединения на TCP-порту номер 22. Спецификация протокола SSH-2 содержится в RFC 4251. Для аутентификации сервера SSH использует алгоритм Diffie-Hellman’а. Для аутентификации клиента — шифрование с открытым ключом (оно сравнительно медленное). Для шифрования передаваемых данных — более быстрое симметричное шифрование. Среди алгоритмов шифрования с открытым ключом чаще всего используются RSA и DSA. Из симметричных алгоритмов — Advanced Encryption Standard(AES), Blowfish и 3DES. Целостность переданных данных проверяется с помощью CRC32 в SSH1 или HMAC-SHA1/HMAC-MD5 в SSH2.

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

Ссылки

Стандарты

Программы терминального доступа

  • OpenSSH — свободная библиотека и набор утилит для поддержки шифрования, открытый код
  • PuTTY — популярный кроссплатформенный SSH-клиент
  • ShellGuard — SSH-клиент
  • SecureCRT — SSH-клиент

Программы доступа к файлам

  • FTP Commander Deluxe— популярная программа поддерживает все безопасные протоколы
  • WinSCP — SFTP-клиент для Microsoft Windows
  • SSH Filesystem — позволяет подключить директорию, доступную на удаленной машине по ssh, как локальную директорию в GNU/Linux.

Прочее

Обновлено 28 декабря 2018 г.