Как повторно подключиться к отключенному сеансу SSH

Как повторно подключиться к отключенному сеансу SSH

Есть ли способ подключиться к сеансу 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.

Связанный контент