Mosh — SSH 2012 года

    Mosh — замена(или дополнение) SSH. Он быстрее и отзывчивее, особенно на линках с высокой задержкой, например, в мобильных сетях. Набираете символ, и моментально видите его на экране, так же, как и в локальном терминале. Почему? Потому, что в Mosh реализован так называемый local line editing, который не дожидается ответа от сервера, а сразу все отображает на экране. Работает даже в полноэкранных приложениях, вроде vim или emacs. И это далеко не единственный плюс!

    C Mosh вы можете:


    Менять ip и оставаться подключенным
    Большинство софта отваливается, если переключиться, например, между wi-fi сетями. Mosh — нет.
    Сохранять сессию при потере подключения
    Упал интернет? Отправили ноутбук в сон? Mosh очнется, как ни в чем не бывало.
    Запускать от имени пользователя
    Никаких демонов. Не нужно быть root, чтобы установить или запустить Mosh.
    Логиниться как прежде
    Mosh не слушает портов и не производит аутентификацию. Mosh авторизовывается по ssh и запускает сервер через udp.
    Жать Control-C один раз
    Mosh не заполняет сетевые буфферы и использует udp, так что если вы случайно вывели 100 мегабайтный файл на экран, ^C моментально остановит его вывод.

    Недостатки и неоднозначности:


    • IPv6 еще не реализован
    • Работает только с UTF-8
    • Использует порты 60000–61000 (тысячу портов)


    Официальный сайт
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 82

      +7
      Использует порты 60000–61000 (тысячу портов)


      Бредятина какая-то
        +37
        Использует порты. Тысячи их! Внезапно!
          +4
          Ну то что использует 60000-61000 порты еще не говорит о том, что все сразу поюзает, скорее говорит о том, что между 2мя компьютерами возможна 1000 коннектов. И скорее всего просто на случайный порт из данного диаппазона запускает сервер.
            +1
            Ну да. Как ftp в активном режиме.
            +1
            Mosh will log the user in via SSH, then start a connection on a UDP port between 60000 and 61000.

            Не использует оно тысячу портов, не надо пургу гнать. Конкретно выше в цитате с домашней страницы написано про конкретно один порт в пределах от 60000 до 61000. Никаких тысяч.

            p.s. От тысячи портов иной ПК или домашний инет и загнется запросто.
              0
              Он их использует так, как использует ftp в активном режиме. Кому-то будет затруднительно пробрасывать тысячу портов на компьютер за nat, например.
                0
                Не тысячу, а ОДИН ИЗ ТЫСЯЧИ — есть же разница.
                  0
                  Я о том, что в ftp можно использовать 10 портов, и, соответственно, пробрасывать 10 портов. А тут нужно пробрасывать всю тысячу, он же рандомом один из тысячи их выбирает.
                    0
                    Зачем пробрасывать UDP порты? Есть же UDP hole punching.
                      0
                      Есть, я не спорю. И Mosh можно указать порт, я так понял, что он выполняет панчинг. Но нужно каждый раз конкретный порт указывать.
                        0
                        все куда проще, про это можно даже не думать. можно указать конкретный порт, даже не из этой тысячи дефолтных портов, для запуска, все таки не дураки разработчики жэ
                          0
                          Particular port
                          $ mosh -p 1234 darth
                          If the server is behind a port-forwarder or NAT, a particular UDP port can be requested.
              0
              Делят, видимо, пакеты на много кусочков, и гонят между случайными парами портов. Как тут не вспомнить старую шутку:

              «Долгое время считалось, что бит — неделим. Однако советские ученые… !»
              –4
              xyz, да. (из примеров)
                0
                mc несколько косячно работает в mosh…
                при нажатии ctrl-o не очищается экран от панелей. видать как то не так организована вобота с буферами экрана…
                  0
                  Проверил на Debian lenny, там всё корректно.
                    0
                    Ubuntu Oneiric — нормально.
                      0
                      у вас кстати какая верся? и собрано со slang?
                        0
                        mosh 1.1.3, ставил из ppa, как посмотреть, с чем собрано — не знаю.
                          0
                          нене, я имел ввиду версию mc
                          mc -V
                            0
                            $ mc -V [23:50:46]
                            GNU Midnight Commander, версия 4.7.0.9
                            Виртуальная файловая система: tarfs, extfs, cpiofs, ftpfs, fish, undelfs
                            Со встроенным редактором
                            С установленной в системе библиотекой S-Lang с базой данных terminfo
                            C поддержкой внутренней командной оболочки
                            С поддержкой фоновых операций
                            С поддержкой мыши в xterm и консоли Linux
                            С поддержкой событий X11
                            С поддержкой интернационализации
                            С поддержкой многих кодировок
                            Data types: char 8 int 32 long 32 void * 32 off_t 64 ecs_char 8
                    +1
                    Это просто чудо!
                      +2
                      про Ctrl-C подтверждаю работает исправно в отличии от простой сессии в ssh
                      для теста запускал
                      cat бооольшой_файл
                        +2
                        про Ctrl-C подтверждаю работает исправно в отличии от простой сессии в ssh
                        для теста запускал
                        cat бооольшой_файл
                          +1
                          да что ж такое… чего же 2 раза то…
                            +47
                            наверно через mosh писали
                            +2
                            Есть еще стандартная ошибка — запустить tcpdump через ssh не отфильтровав 22й порт. Начинает показывать клиенту пакеты, потом пакеты, которые содержали эти пакеты и т.п.

                            С этим mosh тоже нормально сработал
                              +4
                              Может потому что mosh через udp работает? (irony)
                            +12
                            Ну наконец-то в первый раз за почти 30 лет кто-то обратил внимание на очевидные недостатки ssh. Жаль, для винды пока нет клиента…
                              +1
                              Трафик-то по прежнему шифрованный между клиентом и сервером, надеюсь?
                                +1
                                Да. Используется AES-128 в OCB режиме.
                              • UFO just landed and posted this here
                                  +5
                                  Мой внутренний параноик радостно видит в Вас собрата и присоединяется.
                                  И да:
                                  OCB Mode — Submitted on April 1, 2001
                                  Нафиг-нафиг-нафиг!
                                  0
                                  << и моментально видите его на экране
                                  Можно подробнее? Как это согласуется с shadow?
                                    0
                                    Насколько я понял, то mosh «угадывает» ответ от сервера и выдает его заранее. Но эта штука срабатывает только, если начинаются сетевые лаги. Как то так:)
                                    0
                                    Блин вот бы клиент под андройд
                                      0
                                      Для Windows клиент есть? Что-то не нашел :(
                                        0
                                        Нет, к сожалению.
                                          0
                                          Скоро будет: github.com/keithw/mosh/issues/164. В целом все под cygwin уже работает (я проверил на собственном опыте), осталось только вмерджить все воедино в master и собрать дистрибутив с нужными dll-ками cygwin-а — тогда можно будет под windows запускать в нативном режиме.
                                          0
                                          Реально шустро. Nice.
                                            +1
                                            Это «ура!»
                                            Ибо работать по ssh через того же «МТС-оленя» — занятие для бесконечно терпеливых людей с нервами неограниченной крепости.
                                            • UFO just landed and posted this here
                                                –1
                                                Хам и быдло.
                                                • UFO just landed and posted this here
                                            +3
                                            Только я познал дзен набирания целых скриптов вслепую, пока ssh коннектится/логинится/тормозит — и тут на тебе.
                                              0
                                              В ssh есть режим master, запускаешь в начале дня скрипт который цепляется на все направления и поддерживает мастер сокеты, потом логин куда угодно происходит мгновенно. То есть вообще мгновенно.
                                                0
                                                С ним если один пайп висит, то сидешь и ждешь пока он по таймайту отвалится.
                                                  0
                                                  Не понял это как? расскажите как смоделировать ситуацию.

                                                  Я делаю так. Открываю мастер, логинюсь через него на сервер и вешаю шелл на некореектно смонтированной nfs шаре (намертво в UNINTERRUPTABLE_SLEEP), в это время через мастер запросто можно поднимать новые сессии.
                                                    +1
                                                    А если соединение подвиснет? Вот то-то же.
                                                      0
                                                      Открываем сейсию в одной владке, ходим бродим, открываем новый таб(к этому времени старая уже умерла но brocken pipe не написала) и пытаемся подключится к серверу. Все залипает до тех пор пока в старой вкладке не появится brocken pipe, и происходит новое подклчение.
                                                  +1
                                                  В ИТ всегда так: только, думаешь, освоил что-то, научился хорошо это делать, другим пример показываешь, а тут — ОП! — и все это внезапно никому не нужно, придумали новые антиграбли со своим норовом :)

                                                  Ничего, небось для «вслепую» патч выпустят — если с ключиком --want-to-type-blind запустить, он будет случайную паузу делать перед отработкой нажатия клавиш.
                                                  +5
                                                  Реально оценил только Control+C.

                                                  Культура запускать все под screen на удаленной стороне, решает все проблемы класса сохранения сессии и т.п. Переконнект при смене ip может и нужен кому, но я такой необходимости не замечал (работаю с трансформера из разных сетей постоянно).
                                                  Фишка с мгновенным отображением печатаемого символа вообще непонятно вредная или полезная, я обычно набирая команды в слепую на тормозном соединении, обязательно дожидаюсь пока все символы отрисуются, прежде чем нажать ввод.
                                                    +1
                                                    Вот это меня тоже смущает… Хотя бы видишь, что команды проходят, и какие прошли, т.е. контролируешь ситуацию.

                                                    Мне реально приходилось работать через обычный ssh на очень глючном GPRS соединении. Реакция на нажатия клавиш была до пяти секунд. Я в эти моменты с трепетом вспоминал старый-добрый диалап…
                                                      +1
                                                      Согласен про screen. Он полностью закрывает все обозначенные выше проблемы. Что касается «мгновенного отображения» — думаю, скорее плюс, потому что пока строку не отредактируешь, как хочешь, на сервер она не уйдет. Но очевидно, что мы теряем прелести вроде автодополнения (если только они по tab'у не бегают все-таки на сервер — что уже может насторожить).
                                                        0
                                                        Screen неудобен, когда из-под него запускаешь другие программы, тоже пытающиеся работать с ncurses (например, Midnight Commander). Выглядит не очень это. SSH-клиент с автоматической поддержкой реконнекта из коробки — это очень полезная вещь.
                                                      0
                                                      > Набираете символ, и моментально видите его на экране, так же, как и в локальном терминале.

                                                      А вывод команд тоже локально додумывается, без ожидания ответа от сервера?
                                                        +4
                                                        И не только вывод команд, но и ввод:
                                                        user@puser:$ pi
                                                        PING ya.ru (87.250.250.203) 56(84) bytes of data.
                                                        64 bytes from www.yandex.ru (87.250.250.203): icmp_req=1 ttl=56 time=12.3 ms
                                                        64 bytes from www.yandex.ru (87.250.250.203): icmp_req=2 ttl=56 time=12.4 ms
                                                        64 bytes from www.yandex.ru (87.250.250.203): icmp_req=3 ttl=56 time=12.6 ms
                                                        ng goo
                                                        PING google.com (173.194.32.41) 56(84) bytes of data.
                                                        64 bytes from arn06s02-in-f9.1e100.net (173.194.32.41): icmp_req=1 ttl=46 time=52.3 ms
                                                        64 bytes from arn06s02-in-f9.1e100.net (173.194.32.41): icmp_req=2 ttl=47 time=52.2 ms
                                                        64 bytes from arn06s02-in-f9.1e100.net (173.194.32.41): icmp_req=3 ttl=47 time=52.2 ms
                                                        dok.ru
                                                        PING goodok.ru (213.189.197.83) 56(84) bytes of data.
                                                        64 bytes from axx83.distributed.zenon.net (213.189.197.83): icmp_req=2 ttl=119 time=19.9 ms
                                                        64 bytes from axx83.distributed.zenon.net (213.189.197.83): icmp_req=3 ttl=119 time=26.1 ms
                                                        64 bytes from axx83.distributed.zenon.net (213.189.197.83): icmp_req=4 ttl=119 time=41.4 ms
                                                        ^C
                                                        --- goodok.ru ping statistics ---
                                                        4 packets transmitted, 3 received, 25% packet loss, time 3011ms
                                                        rtt min/avg/max/mdev = 19.995/29.207/41.448/9.018 ms


                                                          +1
                                                          Прошу прощения, вот так должна эта каша выглядеть.
                                                            0
                                                            я так понимаю, это должно лечиться опцией
                                                            --predict=never
                                                            которую можно впаять по дефолту.
                                                            0
                                                            ладно ping, а если rm что-то додумает?
                                                          +4
                                                          >...That marked the OpenSSH 1.2.2 release, which was shipped with OpenBSD 2.6 in December 1, 1999.

                                                          > Mosh — SSH 2012 года… Он быстрее и отзывчивее, особенно на линках с высокой задержкой

                                                          хм
                                                            0
                                                            Так и не нашел, как залогиниться на нестандартном порту ssh, не 22.

                                                            0
                                                            Я так и не понял, это какой-то довесок к SSH или модификация SSH-сервера/клиента?
                                                            Пока не щупал, потому что все уже настроено и работает с SSH, не хочется ломать.
                                                              +2
                                                              Вообще, это замена ssh, но логинится он через ssh. Т.е. устанавливаете mosh на клиенте и сервере, запускаете на клиенте mosh your_server, он подключается к ssh, вы вводите пароль, он на той стороне запускает mosh-server и подключается уже к порту mosh через udp. Больше ssh не используется.
                                                              –1
                                                              Реквестирую полноценную статью-инструкцию по установке на убунту.
                                                              Два абзаца — маловато.
                                                                +3
                                                                facepalm.jpg

                                                                $ sudo add-apt-repository ppa:keithw/mosh
                                                                $ sudo apt-get update
                                                                $ sudo apt-get install mosh

                                                                В 12.04 он уже в официальных репах.

                                                                  0
                                                                  Эмм, клиент, сервер, как использовать, как подключаться из Windows-машин, как подключаться из *nix машин.
                                                                    +4
                                                                    Мне кажется, mosh Вам не нужен…
                                                                      0
                                                                      В этом пакете и клиент и сервер. Серверную часть клиент запускает сам после подключения по ssh. Для подключения надо просто запустить mosh <адрес_сервера>
                                                                  +4
                                                                  «Потому, что в Mosh реализован так называемый local line editing»

                                                                  Справедливости ради, впервые это появилось в Telnet более 20 лет назад в виде так называемой LINEMODE-опции (когда редактирование строки происходит на клиенте, RFC1184) и традиционно поддерживалось на всех BSD как минимум. Я слышал, что были планы добавить это в OpenSSH, но не знаю, чем это кончилось.

                                                                    0
                                                                    А скажите мне, когда при отсутствующем соединении он пишет
                                                                    Mosh: Connecting... (155 s without contact.) [To quit: Ctrl-^ .]
                                                                    что нажимать то надо чтоб остановить процесс? Пробовал Ctrl-6, Ctrl-Shift-6, Ctrl-Up, Ctrl-Up-. — безрезультатно. Ну и Ctrl-Z, Ctrl-C тоже не работают.
                                                                      0
                                                                      Ctrl-^
                                                                      
                                                                      ?
                                                                        0
                                                                        чорт. дубль два.

                                                                        Ctrl-^ .
                                                                        

                                                                        ?
                                                                          0
                                                                          Что минусовать то сразу? Сами то пробовали?
                                                                            0
                                                                            На мой взгляд, вот эти простые действия:

                                                                            ximaera@atlantis:0#530:~$ /tmp
                                                                            cd /tmp
                                                                            ximaera@atlantis:0#531:/tmp$ git clone https://github.com/keithw/mosh.git
                                                                            Cloning into mosh...
                                                                            remote: Counting objects: 3558, done.
                                                                            remote: Compressing objects: 100% (1075/1075), done.
                                                                            remote: Total 3558 (delta 2552), reused 3429 (delta 2446)
                                                                            Receiving objects: 100% (3558/3558), 678.62 KiB | 520 KiB/s, done.
                                                                            Resolving deltas: 100% (2552/2552), done.
                                                                            ximaera@atlantis:0#532:/tmp$ grep -r Ctrl-\^ mosh
                                                                            mosh/man/mosh.1:The escape sequence to shut down the connection is \fBCtrl-^ .\fP
                                                                            mosh/src/frontend/stmclient.cc:	if ( the_byte == '.' ) { /* Quit sequence is Ctrl-^ . */
                                                                            mosh/src/frontend/stmclient.cc:	  /* Emulation sequence to type Ctrl-^ is Ctrl-^ ^ */
                                                                            mosh/src/frontend/stmclient.cc:	  /* Ctrl-^ followed by anything other than . and ^ gets sent literally */
                                                                            mosh/src/frontend/terminaloverlay.cc:    swprintf( tmp, 128, L"mosh: Last contact %.0f seconds ago. [To quit: Ctrl-^ .]", (double)(now - last_word_from_server) / 1000.0 );
                                                                            mosh/src/frontend/terminaloverlay.cc:    swprintf( tmp, 128, L"mosh: %ls [To quit: Ctrl-^ .]", message.c_str() );
                                                                            mosh/src/frontend/terminaloverlay.cc:    swprintf( tmp, 128, L"mosh: %ls (%.0f s without contact.) [To quit: Ctrl-^ .]", message.c_str(),
                                                                            ximaera@atlantis:0#533:/tmp$ grep -rnA 10 Ctrl-\^ mosh/src/frontend/stmclient.cc
                                                                            214:	if ( the_byte == '.' ) { /* Quit sequence is Ctrl-^ . */
                                                                            215-	  if ( network->has_remote_addr() && (!network->shutdown_in_progress()) ) {
                                                                            216-	    overlays.get_notification_engine().set_notification_string( wstring( L"Exiting on user request..." ) );
                                                                            217-	    network->start_shutdown();
                                                                            218-	    return true;
                                                                            219-	  } else {
                                                                            220-	    return false;
                                                                            221-	  }
                                                                            222-	} else if ( the_byte == '^' ) {
                                                                            223:	  /* Emulation sequence to type Ctrl-^ is Ctrl-^ ^ */
                                                                            224-	  network->get_current_state().push_back( Parser::UserByte( 0x1E ) );
                                                                            225-	} else {
                                                                            226:	  /* Ctrl-^ followed by anything other than . and ^ gets sent literally */
                                                                            227-	  network->get_current_state().push_back( Parser::UserByte( 0x1E ) );
                                                                            228-	  network->get_current_state().push_back( Parser::UserByte( the_byte ) );	  
                                                                            229-	}
                                                                            230-
                                                                            231-	quit_sequence_started = false;
                                                                            232-	continue;
                                                                            233-      }
                                                                            234-
                                                                            235-      quit_sequence_started = (the_byte == 0x1E);
                                                                            236-      if ( quit_sequence_started ) {
                                                                            ximaera@atlantis:0#534:/tmp$ 
                                                                            

                                                                            позволяют однозначно узнать, что что mosh закроется, когда увидит на stdin последовательность (0x1e, '.'). При этом эти действия занимают несколько меньше времени, чем тот час, который вы провели в ожидании (бесполезного) ответа на комментарий на Хабре. У меня это отняло менее минуты, плюс ещё минута на поиск репозитория на официальном сайте mosh, ссылку на который привёл автор. Даже вот этот комментарий я дольше писал.

                                                                            Ладно бы mosh был написан на Haskell, но синтаксис C++ всякий (тем более PHP-программист) способен распарсить.
                                                                            0
                                                                            Я нашел правильную комбинацию — это Ctrl плюс одновременно 6 и английская точка.

                                                                            Но запись Ctrl-^ . ни разу не правильная, так как ^ делается с шифтом, а в искомой комбинации шифт не нужен.
                                                                          +1
                                                                          Проект занятный, надо будет попробовать.

                                                                          P.S. А ещё у них самый уродский сайт на Twitter Bootstrap из тех, что я видел. И наверное хуже уже представить нельзя, потому, что портить можно только вёрстку, но не дизайн.
                                                                            0
                                                                            Ого. У меня мнение совершенно противоположное. Я как на сайт зашел, он мне показался идеалом презентации программы. Все понятно описывается, преимущества, как собрать, как использовать, faq, и все на одной странице. Я люблю именно такие сайты.
                                                                              0
                                                                              Собственно я о наполнении контентом ничего не говорил.

                                                                              Просто использовать столько разных сеток одновременно, да ещё и по вертикали все элементы вразнобой — это же просто смерть глазам. Неужели интуитивно не колбасит от таких вещей, без вникания в теорию? (Это не претензия, просто попытка объяснить свою точку зрения и понять противоположную).
                                                                          • UFO just landed and posted this here
                                                                              0
                                                                              Кстати говоря, cygwin-версия не за горами:
                                                                              github.com/keithw/mosh/issues/164

                                                                              В целом все под cygwin уже работает (я проверил на собственном опыте), осталось только вмерджить все воедино в master и собрать дистрибутив с нужными dll-ками cygwin-а — тогда можно будет под windows запускать в нативном режиме.

                                                                              Only users with full accounts can post comments. Log in, please.