
Есть ли способ подключиться к сеансу ssh, который был отключен? У нас возникли проблемы с сетевым подключением к удаленному сайту, над которым мы работаем отдельно; однако в то же время мы сталкиваемся с большим количеством отключений из-за потери пакетов при подключении к серверам в удаленном месте. Часто сеанс остается активным некоторое время, а иногда он оказывается в середине какого-то действия (редактирование файла, запуск какого-то процесса и т. д.), к которому мне нужно вернуться, а не перезапускать его, если это возможно.
решение1
ОБНОВЛЕНИЕ: Фактический ответ смотрите в ответе zero_r ниже.
Это не ответ, а обходной путь. Используйтеэкран.
При первом входе в систему запустите screen. Вы получите другую оболочку, в ней выполните команды. Если вы отключились, процесс screen поддерживает терминал в рабочем состоянии, чтобы ваша оболочка и запущенные в ней процессы не упали. При повторном подключении запустите 'screen -r' для возобновления работы.
Для настройки и использования экрана требуется гораздо больше, но приведенные выше рекомендации должны решить вашу проблему.
решение2
Попробуйте установить ClientAliveInterval (например, 60) и TCPKeepAlive (да или нет) на соответствующие значения в файле sshd.conf на стороне сервера.
Это позволит сохранить сеанс даже в случае потери соединения на несколько минут.
решение3
Как уже упоминалось выше,Экран GNUэто путь. Он позволяет вам иметь «сеанс экрана» на удаленном компьютере, в котором вы можете запускать несколько команд через несколько «окон экрана». Он просто отключится, если ваше родительское SSH-соединение прервется, сохраняя все подпроцессы, запущенные в нем, живыми и здоровыми.
man screen
как обычно, ваш друг, и пакет ОС следует вызвать, screen
если он не установлен по умолчанию.
Основы таковы:
Запустите сеанс экрана (на удаленном хосте):
$ screen
Отключиться от сеанса экрана: CTRL-A,d
Повторно подключитесь к сеансу экрана после повторного входа в систему:
$ screen -d -r
Откройте еще одно окно экрана: CTRL-A,c
Переключайтесь между открытыми окнами экрана: CTRL-A,space
Естьмногокрутых вещей, которые можно сделать с помощью screen. Я пользуюсь им уже более 10 лет и все еще нахожу новые функции. Это моя любимая утилита Unix.
решение4
Иногда я тоже забывал запустить screen и терял свою незаконченную работу. В этом случае, хотя мы не можем повторно подключиться к прерванному сеансу SSH, переподчинение работающей программы новому терминалу и возобновление того, что вы делали, все еще возможно благодаря reptyr
.
После случайного отключения от сеанса SSH первым делом нужно запустить screen
(или tmux, как вам больше нравится), чтобы соединение снова не разорвалось. Затем в новом сеансе запустить , ps aux | grep {The process to be resumed}
чтобы получить PID. С PID можно попробовать reptyr {PID}
или reptyr -T {PID}
(если есть подпроцессы), чтобы продолжить работу.
Дополнительные замечания:
Также, пожалуйста, рассмотрите возможность установки ClientAliveInterval (например, 60) и TCPKeepAlive (да или нет) на соответствующие значения в sshd.conf на стороне сервера.как указано в ответе zero_r. Или, если вам приходится работать в сетевой среде с заоблачным уровнем потери пакетов, как в Starlink во время шторма,перейти на МОШ, альтернатива SSH, но основанная на UDP.