MyTetra Share
Делитесь знаниями!
Mosh - это SSH-клиент для Linux, поддерживающий стабильное соединение
Время создания: 30.03.2026 17:28
Автор: divan0
Текстовые метки: linux, ssh, mosh, соединение, стабильность
Раздел: Компьютер - Linux - Сеть в Linux
Запись: xintrea/mytetra_syncro/master/base/17748809251fzyr4k1uo/text.html на raw.githubusercontent.com

На Хабре пару лет назад уже упоминали Mosh, но, кажется, есть смысл напомнить хабражителям об этой великолепной программе, которая, вполне возможно, станет для кого-то одним из самых приятных открытий и облегчит жизнь.


Забегая наперед, сразу спойлер — для mosh: не нужны права суперпользователя, он не является демоном, и не занимается аутентификацией и шифрованием (это остается на плечах ssh). Разработали его в MIT, активно развивают, и поддерживают для всех платформ и дистрибутивов.





Чем же mosh лучше традиционного ssh-client, какие проблемы решает и почему вы, скорее всего, на него перейдете?

Основные задачи, которые решает mosh:

  • Возможность роуминга ssh-соединений. Переключайтесь между wi-fi сетями, не бойтесь смены IP в мобильных сетях — соединение не разорвется
  • Уменьшение лагов насколько это возможно, за счет использования UDP и умного predictive echo
  • Оптимизация использования сети — протокол mosh позволяет передавать только то, что должно быть отображено. В итоге Сtrl-C работает мгновенно, даже если вы выплюнули в консоль содержимое 500GB файла
  • Максимальная обратная совместимость — от пользователя требуется минимум телодвижений и знаний, чтобы начать использовать mosh


Под капотом

Mosh-сессия выглядит следующим образом

  1. mosh логинится на сервер по SSH и запускает удаленный процесс mosh-server, который слушает на UDP портах от 60000 до 61000
  2. закрывает SSH-соединение
  3. запускает mosh-client с параметрами mosh-сервера, полученными на шаге 1


Технические подробности

Как правило, remote-shell протоколы исповедуют подход «сервер отправляет все данные клиенту, а клиент уже разбирается, как их отображать». Mosh идет другим путем и хранит состояние экрана на клиенте и сервере, и эти два состояния постоянно синхронизирует — собственно, протокол так и называется — State Synchronization Protocol. Протокол позволяет контролировать частоту синхронизации, в зависимости от качества сетевого соединения.

Отдельно авторы mosh гордятся с нуля написанной эмуляцией UTF-8 терминала — mosh безупречно разруливает все проблемы с UTF-8, с «иероглифами» и escape-последовательностями. Как они сами пишут:

“ISO 2022 locking escape sequences oh flying spaghetti monster please kill me now.”

— actual USENIX peer review from the Mosh paper.

(Why you should trust Mosh with your remote terminal needs: we worry about details so obscure, even USENIX reviewers don't want to hear about them.)

«Почему вы должны доверять Mosh свои потребности в удаленном шеле: мы заботимся о деталях настолько скрытых, что даже ревьюеры USENIX не хотят о них слышать».


Демо

Как говорится, лучше один раз увидеть:


https://www.youtube.com/watch?v=G-1cx2B13JY


Примеры

Использовать mosh так же просто, как и привычный ssh — в большинстве случаев, просто меняете ssh на mosh:


$ mosh myhost.com

$ mosh user@myhost.com


Запустить интерактивную команду вместо $SHELL:


$ mosh myhost.com top


Другой порт сервера:


$ mosh --ssh="ssh -p 2222" myhost.com


Другие опции ssh-клиента:


mosh --ssh="~/bin/ssh -i ./identity" myhost.com


Минусы

По личному опыту, приходилось натыкаться на два момента:

  1. Порты: на сервере, где фаервол строго кастрирует порты, нет ни одного UDP-порта, который можно было бы задейстовать для mosh и нет возможности это изменить — там mosh не подойдет. Однако, такие ситуации редкость — как правило, всегда есть возможность открыть дополнительный порт при надобности
  2. Привычка скроллить в терминале вверх: в mosh это не работает. Приходится чаще пользоваться пейджерами вроде more или less для просмотра длинного вывода.

Остальные нюансы, вроде «пока что не поддерживает IPv6», мне сложно отнести к минусам.


Резюме

Для меня mosh стал одним из самых полезных открытий за последнее время, которые освободили мне время, которое раньше тратилось на переподключение. Не считая вышеупомянутого нюансы с привычкой скроллить, в остальном опыт работы с удаленным шеллом никак не пострадал. Только теперь я спокойно закрывают ноутбук на открытой mosh-сессии и, открыв через два часа, продолжаю с того же места.

Надеюсь, кому-то пригодится также.


Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования