Mosh (от англ. mobile shell) — программа для удалённого подключения с клиентского компьютера к серверу через Интернет. Предоставляет доступ к текстовому терминалу[3]. Mosh аналогичен[4] приложению SSH, но имеет дополнительные функции, предназначенные для повышения удобства работы мобильных пользователей. Основными функциями являются:

  • Сохранение сессий, даже когда клиент меняет свой адрес, например при переходе на другую беспроводную сеть или при переключении между Wi-Fi и мобильным интернетом 3G[5].
  • Поддержание терминальных сессий в активном состоянии даже при потере пользователем своего интернет-подключения или при переводе клиентского компьютера в режим ожидания. Традиционный SSH из-за применения протокола TCP в таких случаях завершает сессию по тайм-ауту протокола[6].
  • Клиент mosh пытается реагировать на события клавиатуры (набор текста, удаление символов), не дожидаясь ответа от сервера, что скрывает сетевую задержку. Используется адаптивная система прогнозирования того, будет ли приложение, работающее на сервере, отображать введённые пользователем символы[7][8].
Mosh
Скриншот программы Mosh
Mosh, в верхней строке информация о перерыве в подключении, в терминале подчеркнуты символы, предсказанные и отображенные локально.
Тип Удалённый доступ
Автор Keith Winstein
Разработчик Keith Winstein[вд]
Написана на C++
Операционная система Unix-подобные системы
Первый выпуск 12 марта 2012; 12 лет назад (2012-03-12)
Последняя версия 1.4.0 (27 октября 2022; 2 года назад (2022-10-27)[1])
Репозиторий github.com/mobile-shell/…
Лицензия GNU GPLv3[2] с исключениями OpenSSL и iOS
Сайт mosh.org

Основными недостатками mosh являются дополнительные требования к серверу, и отсутствие ряда особенностей SSH (например, переадресация подключений).

Реализация

править

Mosh работает на ином уровне по сравнению с SSH. Классические системы удалённого доступа к терминалам просто передают поток байтов в каждом направлении (от сервера к клиенту и от клиента к серверу), используя протокол TCP (в случае SSH), тогда как mosh запускает эмулятор терминала на сервере для получения информации о тексте, отображаемом на экране. Затем mosh-сервер передает этот текст клиентской части приложения, используя протокол UDP, при этом частота обновлений экрана и пересылок изменяется в зависимости от скорости сети[9]. Это позволяет Mosh снижать объём пересылаемых данных при использовании медленных или неустойчивых подключений к сети Интернет.

Поддерживаемые платформы

править

Mosh доступен для большинства дистрибутивов Linux, macOS, FreeBSD, NetBSD, OpenBSD, Android, Solaris, Cygwin, и в виде приложения для Chrome. Программа Termius для iOS (мобильные устройства корпорации Apple) включает независимую реализацию протокола Mosh[10].

Производительность

править

Роуминг

править

Mosh построен на схеме протокола синхронизации состояния (State-Syncronization Protocol, SSP)[11], который поддерживает роуминг с отправкой одного пакета[12]. После изменения IP-адреса клиента он должен послать пакет серверу. Доставки единственного пакета достаточно, чтобы сервер продолжил работу с данным клиентом. Более того, клиенту не нужно знать об изменении своего адреса.

Потери пакетов

править

В статье разработчиков mosh оценивалась работа протокола SSP через линию уровнем потерь пакетов в 29 %. По сравнению с SSH и протоколом TCP, они получили 50-кратное снижение среднего времени ответа (0.33 секунды с mosh, вместо 16,8 секунд). Другое исследование студентов Стэнфордского университета показало, что SSP уменьшает среднее время ответа в 30 раз (с 5,9 секунд до 0,19 секунд)[13].

Локальное эхо

править

По данным разработчиков mosh, их приложение способно верно предсказывать контекст в 70 % случаев и немедленно отображать введённые пользователем символы, уменьшая медиану времени ответа на нажатие клавиши до уровня менее 5 мс (маскируя задержки сети). Другое исследование показало, что mosh способен быстро отобразить около 55 % нажатий клавиш пользователем[14].

Недостатки

править

По сравнению с более популярным SSH, mosh имеет следующие недостатки:

Требование сервера

править

Основным недостатком mosh является необходимость использования собственного сервера. Для работы mosh требуется прямое udp-подключение к серверу[15]. Сервера, защищённые межсетевым экраном с ограничением допустимых портов, не могут использовать mosh (например, если экран допускает лишь входящее TCP SSH соединение к серверу). Также проблемными являются сервера, имеющие непрямое подключение к сети. SSH в некоторых случаях позволяет работать с ними при помощи опции 'ProxyCommand', но такой вариант не поддерживается в mosh[16].

Один порт на подключение

править

По умолчанию, сервер пытается выделить первый свободный UDP порт в диапазоне 60001–60999, по одному порту на каждое подключение. Такое динамическое выделение портов является дополнительной нагрузкой для управления брандмауэром[17][18].

Нет поддержки роуминга IPv6

править

Mosh 1.2.5 поддерживает только фиксированные IPv6 соединения, но не роуминг в IPv6[19]. Для этого необходимо использование параметра командной строки «-6». Существует экспериментальный вариант mosh с поддержкой многопутного IPv6 и динамического переключения между IPv4 и IPv6[20][21].

Пропуски и прокрутка терминала

править

Mosh не поддерживает возможности прокрутки истории в терминале. Работы по реализации были запланированы на релиз 1.3[22]. Одним из способов борьбы с этим является использование mosh в комбинации с терминальным мультиплексором screen или tmux, которые самостоятельно реализуют функцию прокрутки истории в терминале[23].

См. также

править

Примечания

править
  1. mosh-1.4.0 (27 октября 2022). Дата обращения: 27 октября 2022. Архивировано 2 ноября 2022 года.
  2. Выпуск Mosh 1.3, альтернативы SSH Архивная копия от 25 октября 2018 на Wayback Machine /Opennet, 06.04.2017
  3. «Mosh: the mobile shell» Архивная копия от 5 августа 2016 на Wayback Machine. Retrieved on 28 March 2013.
  4. Brockmeier, Joe. «Into the Mosh Pit: A Mobile Shell Replacement for SSH» Архивная копия от 20 марта 2014 на Wayback Machine, linux.com, 10 April 2012. Retrieved on 28 March 2013.
  5. Delony, David. «Mosh: Secure Shell Without the Pain» Архивная копия от 5 июля 2018 на Wayback Machine, Technopedia, 19 October 2012. Retrieved on 28 March 2013.
  6. Cox, John. «MIT researchers chart a new approach for mobile Internet protocols» Архивировано 18 октября 2012 года., Network World, 6 July 2012. Retrieved on 28 March 2013.
  7. Beckert, Axel. «Mosh and AutoSSH: Remote shell tools that make your life easier on a slow or constantly morphing network» Архивная копия от 21 октября 2020 на Wayback Machine, Linux Magazine, November 2012.
  8. Leyden, John. «MIT’s mind-reading Mosh pits itself against SSH daemons» Архивная копия от 25 октября 2018 на Wayback Machine, The Register, 13 April 2012. Retrieved on 28 March 2013.
  9. Winstein, Keith. «Mosh: An Interactive Remote Shell for Mobile Clients», USENIX Annual Technical Conference 2012, Boston, Mass., 14 June 2012.
  10. «Termius Features» Архивная копия от 25 октября 2018 на Wayback Machine, Crystalnix.
  11. «MIT unveils a new Internet protocol for mobile clients». Дата обращения: 25 октября 2018. Архивировано 1 февраля 2016 года.
  12. Winstein, Keith and Balakrishnan, Hari. «Mosh: An Interactive Remote Shell for Mobile Clients (more detailed draft)» Архивная копия от 14 марта 2016 на Wayback Machine. Retrieved on 28 March 2013.
  13. Nagaraj, Kanthi and McMilin, Emily. «Mosh» Архивная копия от 25 октября 2018 на Wayback Machine, Reproducing Network Research, 14 March 2013. Retrieved on 28 March 2013.
  14. Aljunied, Ahmed. «Evaluation of Mosh 'Mobile Shell' Performance Results» Архивная копия от 26 августа 2018 на Wayback Machine, Reproducing Network Research, 13 March 2013. Retrieved on 28 March 2013.
  15. «'Mosh will log the user in via SSH, then start a connection on a UDP port between 60000 and 61000.'» Архивная копия от 5 августа 2016 на Wayback Machine, Retrieved on 19 June 2014.
  16. «Mosh bug report #285: Can’t use a ProxyCommand-based SSH connection», Retrieved on 18 June 2014
  17. «Dangers of opening up a wide range of ports? (mosh)» Архивная копия от 2 сентября 2018 на Wayback Machine, IT Security (Stack Exchange), 13 April 2012. Retrieved on 28 March 2013.
  18. Multiplexing more sessions into same UDP port
  19. [1]Архивная копия от 1 июля 2021 на Wayback Machine [mosh-users] mosh 1.2.5 released
  20. GitHub - boutier/mosh: Multipath version of Mobile Shell. Дата обращения: 25 октября 2018. Архивировано 11 июня 2018 года.
  21. Matthieu Boutier; Juliusz Chroboczek (2015), User-space multipath UDP in Mosh, arXiv:1502.02402, Bibcode:2015arXiv150202402B
  22. https://github.com/keithw/mosh/issues/2 «Scrollback support is planned for version 1.3»
  23. «Scrollback and alternate screen (was: Use alternate screen on smcup/rmcup)»

Ссылки

править