Процесс SSH не уничтожен на удаленной машине, когда удаленная система неожиданно отключается

8

У меня есть вопрос, на который я не смог найти ответ. У меня есть два компьютера, оба из которых работают под управлением Ubuntu 12.04. Я держу один из своих компьютеров дома и использую SSH для подключения к нему с другого («удаленного») компьютера. Удаленный компьютер может без проблем подключаться к домашнему компьютеру. На удаленном компьютере также установлено значение SetAliveInterval, равное 60, в / etc / ssh / ssh_config, так что соединение не прекратится, если я на мгновение отойду от компьютера.

Иногда мое интернет-соединение на удаленном компьютере прерывается. Из-за прерываний Интернета мой SSH-туннель закрывается (конечно). Когда я восстанавливаю подключение к Интернету и снова подключаюсь к домашнему компьютеру, используя новый туннель SSH, я вижу, #ps axчто старый процесс подключения SSH все еще выполняется. Это проблема, потому что я использую зашифрованный домашний каталог на домашнем компьютере, который не позволяет перешифровать файлы до тех пор, пока это (ныне мертвое) соединение SSH не будет разорвано.

Есть ли способ установить sshd_config на домашнем компьютере, чтобы он автоматически определял, когда соединение прервалось, и прерывал его?

JL
источник

Ответы:

5

Попробуйте экран или Tmux . На стороне сервера или обеих сторон, если вам нравится:

sudo apt-get install tmux

После входа запустите tmux .

tmux

Если соединение разрывается, снова войдите в систему через ssh и заново подключите сеанс tmux . Чтобы узнать номер сеанса:

tmux ls

Вывод может быть что-то вроде этого:

Окна 0: 1 (создано Вт 25 дек. 19:20:40 2012)

Подключитесь к сеансу с номером tmux следующим образом:

tmux attach -t 0

Тогда вы вернулись туда, где оставили. Вам не придется убивать сессии. Они просто ждут вашего следующего визита. Или, если вы просто хотите убить сеанс ...

На стороне сервера см. /etc/ssh/sshd_configНастройки для ClientAliveInterval и ClientAliveCountMax . ( man 5 ssh_config)

ClientAliveInterval 300
ClientAliveCountMax 0

Как только они будут изменены по вашему усмотрению, перезапустите сервер SSH.

sudo /etc/init.d/ssh restart

300 секунд (пять минут).


источник
Это именно то, что я искал! Я начну с ClientAliveInterval и обязательно попробую tmux. Спасибо!
JL
1
Третий вариант, кроме Screen и Tmux, это Byobu : Веб-сайт , Википедия . С веб-сайта: «Первоначально он был разработан для предоставления элегантных улучшений в другом функциональном, простом и практичном экране GNU для распространения сервера Ubuntu. Теперь Byobu включает расширенные профили, удобные сочетания клавиш, утилиты настройки и переключаемые уведомления о состоянии системы. как для оконного менеджера GNU Screen, так и для более современного терминального мультиплексора Tmux, и работает в большинстве дистрибутивов Linux, BSD и Mac ».
sierrasdetandil
1

Вы можете попробовать moshУстановить мош , замену SSH, построенную поверх SSH. Он поддерживает и роуминг, и прерывистое подключение, поэтому сеанс Mosh (SSH) будет просто продолжаться с того места, на котором вы остановились, всякий раз, когда ваше подключение к Интернету восстанавливается после прерывания.

Вам нужно будет установить Mosh на обеих машинах.

Ссылки:

Флимм
источник