Русская Википедия:Mosh (программа)
Шаблон:Карточка программы Mosh (от Шаблон:Lang-en) — программа для удалённого подключения с клиентского компьютера к серверу через Интернет. Предоставляет доступ к текстовому терминалу[1]. Mosh аналогичен[2] приложению SSH, но имеет дополнительные функции, предназначенные для повышения удобства работы мобильных пользователей. Основными функциями являются:
- Сохранение сессий, даже когда клиент меняет свой адрес, например при переходе на другую беспроводную сеть или при переключении между Wi-Fi и мобильным интернетом 3G[3].
- Поддержание терминальных сессий в активном состоянии даже при потере пользователем своего интернет-подключения или при переводе клиентского компьютера в режим ожидания. Традиционный SSH из-за применения протокола TCP в таких случаях завершает сессию по тайм-ауту протокола[4].
- Клиент mosh пытается реагировать на события клавиатуры (набор текста, удаление символов), не дожидаясь ответа от сервера, что скрывает сетевую задержку. Используется адаптивная система прогнозирования того, будет ли приложение, работающее на сервере, отображать введённые пользователем символы[5][6].
Основными недостатками mosh являются дополнительные требования к серверу, и отсутствие ряда особенностей SSH (например, переадресация подключений).
Реализация
Mosh работает на ином уровне по сравнению с SSH. Классические системы удалённого доступа к терминалам просто передают поток байтов в каждом направлении (от сервера к клиенту и от клиента к серверу), используя протокол TCP (в случае SSH), тогда как mosh запускает эмулятор терминала на сервере для получения информации о тексте, отображаемом на экране. Затем mosh-сервер передает этот текст клиентской части приложения, используя протокол UDP, при этом частота обновлений экрана и пересылок изменяется в зависимости от скорости сети[7]. Это позволяет Mosh снижать объём пересылаемых данных при использовании медленных или неустойчивых подключений к сети Интернет.
Поддерживаемые платформы
Mosh доступен для большинства дистрибутивов Linux, macOS, FreeBSD, NetBSD, OpenBSD, Android, Solaris, Cygwin, и в виде приложения для Chrome. Программа Termius для iOS (мобильные устройства корпорации Apple) включает независимую реализацию протокола Mosh[8].
Производительность
Роуминг
Mosh построен на схеме протокола синхронизации состояния (State-Syncronization Protocol, SSP)[9], который поддерживает роуминг с отправкой одного пакета[10]. После изменения IP-адреса клиента он должен послать пакет серверу. Доставки единственного пакета достаточно, чтобы сервер продолжил работу с данным клиентом. Более того, клиенту не нужно знать об изменении своего адреса.
Потери пакетов
В статье разработчиков mosh оценивалась работа протокола SSP через линию уровнем потерь пакетов в 29 %. По сравнению с SSH и протоколом TCP, они получили 50-кратное снижение среднего времени ответа (0.33 секунды с mosh, вместо 16,8 секунд). Другое исследование студентов Стэнфордского университета показало, что SSP уменьшает среднее время ответа в 30 раз (с 5,9 секунд до 0,19 секунд)[11].
Локальное эхо
По данным разработчиков mosh, их приложение способно верно предсказывать контекст в 70 % случаев и немедленно отображать введённые пользователем символы, уменьшая медиану времени ответа на нажатие клавиши до уровня менее 5 мс (маскируя задержки сети). Другое исследование показало, что mosh способен быстро отобразить около 55 % нажатий клавиш пользователем[12].
Недостатки
По сравнению с более популярным SSH, mosh имеет следующие недостатки:
Требование сервера
Основным недостатком mosh является необходимость использования собственного сервера. Для работы mosh требуется прямое udp-подключение к серверу[13]. Сервера, защищённые межсетевым экраном с ограничением допустимых портов, не могут использовать mosh (например, если экран допускает лишь входящее TCP SSH соединение к серверу). Также проблемными являются сервера, имеющие непрямое подключение к сети. SSH в некоторых случаях позволяет работать с ними при помощи опции 'ProxyCommand', но такой вариант не поддерживается в mosh[14].
Один порт на подключение
По умолчанию, сервер пытается выделить первый свободный UDP порт в диапазоне 60001–60999, по одному порту на каждое подключение. Такое динамическое выделение портов является дополнительной нагрузкой для управления брандмауэром[15][16].
Нет поддержки роуминга IPv6
Mosh 1.2.5 поддерживает только фиксированные IPv6 соединения, но не роуминг в IPv6[17]. Для этого необходимо использование параметра командной строки «-6». Существует экспериментальный вариант mosh с поддержкой многопутного IPv6 и динамического переключения между IPv4 и IPv6[18][19].
Пропуски и прокрутка терминала
Mosh не поддерживает возможности прокрутки истории в терминале. Работы по реализации были запланированы на релиз 1.3[20]. Одним из способов борьбы с этим является использование mosh в комбинации с терминальным мультиплексором screen или tmux, которые самостоятельно реализуют функцию прокрутки истории в терминале[21].
См. также
Примечания
Ссылки
- Шаблон:Official
- Ализар, Mosh: мобильная оболочка вместо SSH / xakep, 01.09.2014
- Jonathan Corbet, Entering the mosh pit / LWN, May 16, 2017 Шаблон:Ref-en
- 8.4 Mobile Shell (mosh) (p.244) / R.K. Ghosh. Wireless Networking and Mobile Data Management. Springer, 2017. ISBN 9789811039416 Шаблон:Ref-en
- ↑ «Mosh: the mobile shell» Шаблон:Wayback. Retrieved on 28 March 2013.
- ↑ Brockmeier, Joe. «Into the Mosh Pit: A Mobile Shell Replacement for SSH» Шаблон:Wayback, linux.com, 10 April 2012. Retrieved on 28 March 2013.
- ↑ Delony, David. «Mosh: Secure Shell Without the Pain» Шаблон:Wayback, Technopedia, 19 October 2012. Retrieved on 28 March 2013.
- ↑ Cox, John. «MIT researchers chart a new approach for mobile Internet protocols» Шаблон:Webarchive, Network World, 6 July 2012. Retrieved on 28 March 2013.
- ↑ Beckert, Axel. «Mosh and AutoSSH: Remote shell tools that make your life easier on a slow or constantly morphing network» Шаблон:Wayback, Linux Magazine, November 2012.
- ↑ Leyden, John. «MIT’s mind-reading Mosh pits itself against SSH daemons» Шаблон:Wayback, The Register, 13 April 2012. Retrieved on 28 March 2013.
- ↑ Winstein, Keith. «Mosh: An Interactive Remote Shell for Mobile Clients», USENIX Annual Technical Conference 2012, Boston, Mass., 14 June 2012.
- ↑ «Termius Features» Шаблон:Wayback, Crystalnix.
- ↑ Шаблон:Cite web
- ↑ Winstein, Keith and Balakrishnan, Hari. «Mosh: An Interactive Remote Shell for Mobile Clients (more detailed draft)» Шаблон:Wayback. Retrieved on 28 March 2013.
- ↑ Nagaraj, Kanthi and McMilin, Emily. «Mosh» Шаблон:Wayback, Reproducing Network Research, 14 March 2013. Retrieved on 28 March 2013.
- ↑ Aljunied, Ahmed. «Evaluation of Mosh 'Mobile Shell' Performance Results» Шаблон:Wayback, Reproducing Network Research, 13 March 2013. Retrieved on 28 March 2013.
- ↑ «'Mosh will log the user in via SSH, then start a connection on a UDP port between 60000 and 61000.'» Шаблон:Wayback, Retrieved on 19 June 2014.
- ↑ «Mosh bug report #285: Can’t use a ProxyCommand-based SSH connection», Retrieved on 18 June 2014
- ↑ «Dangers of opening up a wide range of ports? (mosh)» Шаблон:Wayback, IT Security (Stack Exchange), 13 April 2012. Retrieved on 28 March 2013.
- ↑ Multiplexing more sessions into same UDP port
- ↑ [1]Шаблон:Wayback [mosh-users] mosh 1.2.5 released
- ↑ Шаблон:Cite web
- ↑ Шаблон:Citation
- ↑ https://github.com/keithw/mosh/issues/2 «Scrollback support is planned for version 1.3»
- ↑ «Scrollback and alternate screen (was: Use alternate screen on smcup/rmcup)»