Как стать автором
Обновить

Mosh — SSH с блекджеком и роумингом

Время на прочтение3 мин
Количество просмотров66K
На Хабре пару лет назад уже упоминали 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 не хотят о них слышать».

Демо


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


Примеры


Использовать 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-сессии и, открыв через два часа, продолжаю с того же места.
Надеюсь, кому-то пригодится также.

Ссылки


Вводное видео про mosh, рекомендовано:



Официальный сайт:
mosh.mit.edu
Теги:
Хабы:
Всего голосов 58: ↑55 и ↓3+52
Комментарии116

Публикации

Истории

Работа

Ближайшие события