Как мне ssh на медленных / нестабильных соединениях?

20

Я имею дело с очень медленным подключением оболочки. Это в облаке, и я очень далеко от сервера. Мое соединение также иногда прерывается, так как оно происходит через Интернет, и я также могу использовать общий Wi-Fi или 3G. Есть ли способ увидеть то, что я печатаю мгновенно? Пытаться набирать команды и ждать каждого персонажа ужасно.

Zombies
источник
4
Используйте «экран», чтобы поддерживать сеанс, чтобы вы могли восстановить соединение при отключении.
Конерак

Ответы:

24

Попробуйте Мош .

Mosh (мобильная оболочка)
Приложение для удаленного терминала, которое позволяет осуществлять роуминг, поддерживает прерывистое соединение и обеспечивает интеллектуальное локальное эхо и линейное редактирование нажатий клавиш пользователя.

Mosh - это замена SSH. Он более надежный и отзывчивый, особенно по Wi-Fi, сотовой связи и междугородной связи.

Mosh - бесплатное программное обеспечение, доступное для GNU / Linux, FreeBSD, Solaris, Mac OS X и Android.

dmourati
источник
3
Предостережения для mosh: (1) это намного более интенсивно использует процессор, чем ssh. (2) Если ваш сеанс mosh не заканчивается нормально, у вас будет утечка соединения, которое никогда не будет восстановлено. (Я должен очистить свою оболочку, иначе будут запущены десятки процессов).
user606723
Другая проблема заключается в том, что почти невозможно установить дистрибутив Linux, такой как Suse (SLES). Я часами пытался установить его как пакет openSuse или скомпилировать его из исходного кода.
Зомби
$ sudo zypper in mosh (согласно документам)
dmourati
Да, это будет хорошо работать на openSuse, но для корпоративного / закрытого дистрибутива очень важно установить новые проекты с открытым исходным кодом.
Зомби
10

альтернатива (а также в дополнение) ответу dmourati: используйте screenили tmuxили другие вещи, чтобы поддерживать сеансы, когда вы отключены. (Вы просто повторно подключаетесь к сеансу после повторного подключения и видите терминал, как вы его оставили, даже с полноэкранными программами [vi и т. Д.]). У него также есть много других преимуществ (совместное использование сеансов с коллегами и т. Д.) (Как в собственном FAQ по Mosh:

Q: Почему буфер прокрутки моего терминала неполон?

Mosh 1.2 синхронизирует только видимое состояние терминала. Mosh 1.3 будет иметь полную поддержку прокрутки; увидеть эту проблему и другие, которые связаны оттуда. В настоящее время, обходной путь должен использовать screen или tmux на удаленной стороне.

И вы также должны использовать rsyncдля копирования файлов, без необходимости повторной отправки уже отправленных частей по сети, когда соединение разорвано.

Оливье Дюлак
источник
2

Вы должны увидеть, где находятся латентность / узкие места. Вы должны попытаться получить лучший доступ к инфраструктуре ... локально или на стороне провайдера. Вы завернуть важные или критические сессии в tmuxили screenмультиплексоры ...

Пожалуйста, дайте нам номера. Для простых сессий SSH требуется особенно плохое соединение ... У меня был доступ к системам на другом конце света из самолета через VPN, и у меня все еще не было особых проблем. Это постоянная проблема? Что tracerouteтебе говорит?

ewwhite
источник
Проблема возникает в Wi-Fi отеля, где слишком мало маршрутизаторов и слишком много устройств / ноутбуков, использующих доступ к Интернету. Кроме того, общий Wi-Fi в отеле по своей природе довольно вялый со временем пинга, так как проход через 1 или более стен действительно добавляет много мс задержки. Это также еще одно серьезное узкое место. Аналогичная ситуация возникает в 3G, где такое большое расстояние до башни сотовой связи добавляет MS. При использовании SSH-оболочек мне приходится ждать каждого символа. MS 200-400 может быть довольно раздражающим, но с шипами до 1 секунды ... ой.
Зомби
1

Для будущих читателей этой ветки подсказка @lowellheddings в его блоге , наряду с использованием экрана , может помочь решить эту проблему:

Вы можете настроить клиент ssh так, чтобы он автоматически отправлял код неиспользуемого кода протокола каждые несколько секунд, чтобы сервер не отключал вас. Этот параметр иногда упоминается как Keep-Alive или Stop-Disconnecting-So-Much в других клиентах.
Добавьте следующую строку в файл / etc / ssh / ssh_config:
ServerAliveInterval 60
...

Снидхи Софпро
источник