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