Сессия, подобная SSH, которая сохраняется при физическом отключении сети.

Вопрос или проблема

Я хочу, чтобы моя SSH-сессия оставалась подключенной после перехода компьютера в спящий режим и его пробуждения. Насколько я понимаю, TCP может выживать при прерывистых сетевых проблемах, так что могу ли я изменить настройки, чтобы он мог продержаться несколько часов или дней? Если нет, есть ли что-то подобное SSH, что может это сделать?

Я понимаю, что могу настроить SSH на автоматическое восстановление соединения, когда сеть снова станет доступна. Но это не идеально, потому что я хочу, чтобы моя сессия входа находилась точно в том месте, где она была до того, как ноутбук перешел в спящий режим (даже если я нахожусь на полпути к вводу чего-то в командной строке оболочки).

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

TCP-соединение должно быть способно выживать при отключении, но некоторые чрезмерно бдительные брандмауэры могут разрывать неактивные соединения, и оно не выживет, если ваш IP-адрес изменится, если это возможно.

Для интерактивных сеансов я бы использовал Mosh. Он реализует терминальное соединение, похожее на SSH, по протоколу UDP, поддерживает повторное подключение с другого IP-адреса при необходимости и имеет некоторые функции для поддержки нестабильных соединений.

Независимо от того, решите ли вы использовать SSH или Mosh, также используйте screen или tmux, чтобы сделать вашу сессию независимой от соединения.

screen или tmux определенно являются лучшим выбором. Соединение ssh тогда становится лишь средством для достижения цели, и не имеет значения (в разумных пределах), как часто оно разрывается во время простоя.

Если вас беспокоит необходимость помнить о запуске screen при входе на удаленный сервер, это не будет слишком сложно сделать так, чтобы интерактивная сессия автоматически присоединялась к существующему screen или создавалась новая, если уже не было запущено ни одной.

Rocks (Reliable sOCKetS) является оберткой для программ, которые устанавливают клиентские TCP-соединения, которая обнаруживает, когда TCP-соединение прерывается, и автоматически восстанавливает подключение клиента, даже если он переместился в другую сеть. Это было описано в статье Reliable Network Connections и доступно для загрузки. Оно не поддерживается, но использует довольно стабильные интерфейсы, поэтому должно работать и сегодня. Оно использует предварительную загрузку библиотек (LD_PRELOAD), чтобы затенять функции стандартной библиотеки, поэтому работает только с динамически связанными исполняемыми файлами. Вам просто нужно запустить это как

rocks ssh …

Rocks обрабатывает мобильность клиента, а не сервера. Если сервер переместится, вам может понадобиться дополнить это SOCKS прокси.

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

Альтернативой Mosh, если у вас в основном надежное, но время от времени перемещающееся соединение, является autossh для автоматического восстановления соединения и screen или tmux, работающие на сервере. Сессия screen/tmux остается на сервере, даже если клиент отключается, и autossh автоматически восстанавливает соединение, если оно теряется.

Я тоже страдаю от потери сессий ssh.

И мне не нравятся вещи tmux, screen, которые нарушают мои привычки.

Это то, что вам нужно?

Ответ или решение

Чтобы ваш SSH-сеанс оставался активным даже после отключения сети, например, когда ноутбук переходит в режим сна, следует учитывать несколько ключевых аспектов, поскольку стандартные настройки TCP не могут гарантировать 100% выживание сессий. Ниже представлены несколько подходов для достижения этой цели.

Гарантия устойчивости сессии

  1. TCP и его ограничения:
    Хотя TCP и способен справляться с временными перебоями в соединении, изменения IP-адреса во время дессона сессии (например, при переходе с Wi-Fi на беспроводной интернет) приведут к разрыву соединения. Предположим, что ваша сессия останавливается из-за сетевого простоя, ваша SSH-сессия будет разорвана после определенного периода времени из-за таймаутов.

  2. Использование Mosh:
    Mosh (Mobile Shell) — это утилита, специально созданная для обеспечения устойчивости сессий при проблемах с сетью. Она использует UDP вместо TCP, что позволяет поддерживать соединение при перемещении между сетями или при потере связи. Кроме этого, Mosh сохраняет ваше состояние на момент разъединения и автоматически восстанавливает его, как только связь восстанавливается. Это идеальный выбор для тех, кто часто перемещается или работает в нестабильных сетях.

  3. Комбинация SSH с tmux или screen:
    Если вы хотите сохранить сеанс SSH, тогда стоит рассмотреть возможность использования терминальных мультиплексоров, таких как tmux или screen. Эти инструменты позволяют создавать виртуальные терминалы, которые продолжают функционировать на сервере, даже если соединение с клиентом прервано. В том случае, если ваше соединение обрывается, можно повторно подключиться к уже запущенному сеансу и продолжить работу с того места, где остановились.

  4. Автоматическое восстановление сессий с autossh:
    Вы можете использовать autossh в сочетании с tmux или screen. Этот инструмент будет автоматически попытаться восстановить соединение SSH при потере связи. При этом, ваша сессия в tmux или screen останется активной, позволяя вам восстановить её состояние.

  5. Использование Rocks:
    Rocks — это обертка для программ, использующих TCP-соединения, которая автоматически восстанавливает соединение, если оно прерывается. Однако учитывайте, что это решение не поддерживается, но может быть полезным в отдельных случаях.Данная утилита работает только с динамически скомпилированными программами и подходит для специфичных сценариев использования.

  6. Современные альтернативы:
    Если вы хотите избежать использования screen и tmux, рассмотрите такие альтернативы, как Eternal Terminal. Это инструмент, который позволяет подключаться к SSH-сессиям с продолжением с того места, где была потеряна связь, без необходимости установки дополнительных инструментов, таких как tmux или screen.

Заключение

Чтобы сохранить SSH-сессию во время отключения сети, вам стоит рассмотреть использование утилит, которые специально спроектированы для этого, таких как Mosh или сочетание SSH с tmux/screen и autossh. Они помогут вам избежать потерь времени и позволит продолжить работу с того момента, где она была прервана. Каждый из этих решений имеет свои преимущества и недостатки, поэтому конечный выбор будет зависеть от ваших личных предпочтений и сценариев использования.

Оцените материал
Добавить комментарий

Капча загружается...