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

в 10:27, , рубрики: mosh, ssh, terminal, Настройка Linux, Серверное администрирование, системное администрирование

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

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

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

Чем же 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 не хотят о них слышать».

Демо

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

Демо GIF ~10MB

image

Примеры

Использовать 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

Автор: divan0

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js