Интернет-протокол SSH - Web-based SSH

Интернет-протокол SSH позволяет получить доступ Безопасная оболочка (SSH) через стандартные веб-браузеры. Соответствующие клиенты обычно основаны на JavaScript /Аякс или же JavaScript /WebSockets, и, если они работают вместе с прокси-сервером Ajax / WebSocket-to-SSH, могут использоваться для доступа к серверам SSH из-за брандмауэр или же доверенное лицо который разрешает трафик HTTP, но не разрешает трафик SSH.

Технологии

Веб-клиенты SSH в основном состоят из следующих частей:

  • Сторона клиента: Обычно JavaScript и динамичный HTML страницы используются для захвата нажатий клавиш, передачи сообщений на / с сервера и отображения результатов в пользовательском веб-браузер.
  • Серверное / веб-приложение: Входящие запросы обрабатываются на сервер веб-приложений. События клавиатуры пересылаются клиенту защищенной оболочки, который обменивается данными с подключенным SSH сервер. Вывод терминала либо передается клиенту, где он конвертируется в HTML через JavaScript или это переведено на HTML сервером до того, как он будет передан клиенту.

Эмуляция клиентского терминала

Веб-серверы SSH, которые используют эмуляцию терминала на стороне клиента, обычно передают необработанный вывод терминала с сервера SSH непосредственно клиенту. Это дает преимущество в том, что процесс перевода вывода терминала в HTML перекладывается на клиента. Недостатком метода является то, что он ограничен возможностями JavaScript и он будет использовать нетривиальное количество процессора и памяти клиента для обработки входящего потока символов. Он также полагается на то, что клиент отслеживает состояние терминала и отвечает на escape-последовательности.

Пример эмулятора клиентского терминала: vt100.js[1]

Эмуляция терминала на стороне сервера

Веб-серверы SSH, которые используют эмуляцию терминала на стороне сервера, обычно отслеживают экран и состояние терминала в памяти и конвертируют его в HTML либо при обновлении экрана, либо когда клиент явно запрашивает обновление. Преимущество этого метода заключается в том, что состояние терминала остается постоянным, даже если пользователь подключается к существующему сеансу (-ам) из другого веб-браузера. Это также позволяет серверу действовать после вывода терминала, даже если пользователь отключен.[2] Недостатком этого метода является то, что он использует больше ресурсов ЦП и памяти на сервере.

Пример эмулятора терминала на стороне сервера: terminal.py[3]

Преимущества

Основные преимущества веб- SSH можно резюмировать следующим образом:

  • Доступность: SSH на базе Интернета, как описано в этой статье, не требует локальной установки клиентского программного обеспечения. Таким образом, можно получить доступ к серверам SSH через веб-браузер из любого места. Поскольку общение основано на HTTP или же HTTPS также можно получить доступ к серверам SSH из-за брандмауэр или же доверенное лицо который ограничивает доступ в Интернет только портами 80 (HTTP ) или 443 (HTTPS ).
  • Анонимный доступ: Поскольку доступ SSH туннелируется через посредника сервер веб-приложений именно этот сервер взаимодействует с SSH-сервером. Это означает, что SSH-сервер будет знать только о айпи адрес сервера веб-приложений, сохраняя фактический IP-адрес клиента скрытым.
  • Возможность аудита: Потому что вся связь между клиентом и сервером SSH должна проходить через сервер веб-приложений это общение можно регистрировать. Это не позволяет злоумышленнику удалить журналы своей деятельности. Ситуация точно такая же, как и с традиционным SSH-сервером.
  • Возобновление сеансов: Некоторые веб-реализации SSH позволяют пользователю возобновить свои сеансы SSH после отключения. Это невозможно с традиционным клиентом SSH.
  • Встраиваемый: Реализации SSH на базе Интернета могут быть встроены в любую веб-страницу, что позволяет интегрировать их в другие веб-приложения.
  • Уникальные черты: Многие веб-инструменты SSH обладают уникальными функциями, такими как возможность совместного использования терминалов с другими пользователями, отображение изображений внутри терминалов и другие полезные возможности.

Важные вопросы

При использовании веб-клиента SSH необходимо учитывать следующие важные моменты:

  • Безопасность: Важно убедиться, что HTTPS используется при общении с сервер веб-приложений. В противном случае все отправляемые данные будут доступны для чтения с помощью простого анализаторы пакетов которые могут раскрыть конфиденциальную информацию.
  • Доверять: Данные, отправляемые на сервер веб-приложений, расшифровываются там. Это необходимо для того, чтобы передать выданные команды фактическому SSH сервер. Хотя операторы сетевых SSH-решений обычно не регистрируют конфиденциальные данные, теоретически данные доступны им в простой форме. Маловероятно, что это вызовет проблемы с безопасностью, когда сервер веб-приложений и сервер SSH работают на одном сервере или контролируются одним и тем же объектом.
  • Туннелирование: В отличие от большинства традиционных SSH-клиентов на основе приложений, веб-клиенты SSH не могут туннелировать («пересылать») TCP трафик. Например, запуск Икс сеанс через веб-сеанс SSH невозможен. Однако отсутствие способности вызвано проблемами реализации, а не каким-либо образом.[4]

Бесплатные примеры с открытым исходным кодом

  • Google Расширение Secure Shell для Chrome и Chromium[5] объединяет эмулятор терминала JavaScript hterm с OpenSSH клиентский код, работающий на Собственный клиент.[6] Расширение Secure Shell работает с прокси-серверами HTTP-to-SSH, отличными от Google, через перехватчики прокси и сторонними приложениями. насш-реле[7] могут использовать эти перехватчики, чтобы включить расширение Secure Shell для установления SSH-соединения через XMLHttpRequest или же WebSocket транспорт.
  • Shellinabox[8] работает как отдельный сервис или вместе с nginx предоставлять HTTPS доступ к оболочке входа в систему и упакован для Debian и Красная шляпа -полученный Linux раздачи.
  • webssh[9] аналогичное решение, написанное на Python.
  • Бастильон[10] - это автономный веб-сервер-бастион с возможностями аудита и управления ключами. Пользователи подключаются к централизованному серверу через HTTPS и соединения SSH проксируются через безопасный WebSocket транспорт.
  • Из-за прерывистых сетевых подключений с таймаутами подключения.[11] Mosh от MIT может быть лучшим решением[12] Сначала он использует SSH, затем UDP оттуда.[13]
  • FireSSH это надстройка браузера, работающая в Firefox ESR и Waterfox.

Существуют также библиотеки JavaScript, которые позволяют писать веб-сайт, похожий на терминал. Примеры: jQuery Terminal[14] и XTerm.js.[15]

Рекомендации

  1. ^ http://code.google.com/p/shellinabox/source/browse/demo/vt100.js
  2. ^ Функция expect из модуля termio.py Gate One может действовать на вывод терминала, даже если пользователь отключен.
  3. ^ https://liftoff.github.io/GateOne/Developer/terminal.html
  4. ^ jcterm утверждает, что может обрабатывать перенаправление портов, например перенаправление X11
  5. ^ https://chrome.google.com/webstore/detail/pnhechapfaindjhompbnflcldabbghjo
  6. ^ Chromium Secure Shell: часто задаваемые вопросы
  7. ^ nassh-relay репозиторий GitHub
  8. ^ https://github.com/shellinabox/shellinabox
  9. ^ https://pypi.org/project/webssh/
  10. ^ Bastillion - веб-доступ по SSH и управление ключами
  11. ^ Есть ли программный пакет, который безопасно разрешает SSH через Интернет на простом веб-хосте?
  12. ^ mosh - это замена SSH, которая решает проблемы с подключением и задержками
  13. ^ Mosh: интерактивная удаленная оболочка для мобильных клиентов
  14. ^ Эмулятор терминала jQuery Плагин jQuery, позволяющий писать собственные команды.
  15. ^ XTerm.js библиотека, которую можно использовать для написания реального терминального (tty) приложения; например он может отображать редакторы, такие как vi или же Emacs в текстовом режиме.