it-swarm-ru.tech

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

Есть ли способ подключиться к сеансу ssh, который был отключен? У нас проблемы с сетевым подключением к удаленному сайту, над которым мы работаем отдельно; тем не менее, в то же время мы испытываем большое количество отключений из-за потерянных пакетов при подключении к серверам в удаленном местоположении. Часто сеанс некоторое время остается активным, а иногда это происходит в середине какого-то действия (редактирование файла, запуск какого-либо процесса и т.д.), К которому мне нужно вернуться, а не перезапустить, если это возможно.

164
palehorse

ОБНОВЛЕНИЕ: фактический ответ см. Ниже в ответе zero_r

Это не ответ, а обходной путь. Используйте экран .

При первом входе в систему запустите экран. Вы получаете другой Shell, запускаете команды в этом. Если вы отключены, экранный процесс поддерживает работу терминала, чтобы ваша консоль и процессы, на которых она работает, не перепадали. При повторном подключении запустите 'screen -r', чтобы продолжить.

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

142
kbyrd

Попробуйте установить ClientAliveInterval (например, 60) и TCPKeepAlive (да или нет) в соответствующие значения на стороне сервера sshd.conf.

Это должно поддерживать ваш сеанс, даже если соединение теряется на несколько минут.

134
zero_r

Как уже упоминалось выше, GNU Screen это путь. Это позволит вам иметь "сеанс экрана" на удаленном блоке, в котором вы можете запускать несколько команд через несколько "окон экрана". Он просто отсоединится, если ваше родительское SSH-соединение прекратит работу, и все подпроцессы, работающие в нем, будут работать нормально.

"man screen 'как обычно ваш друг, и пакет ОС должен называться' screen ', если он не установлен по умолчанию.

Основы:

  • Начните сеанс экрана (на вашем удаленном хосте):

    $ screen
    
  • Отключиться от сеанса экрана: CTRL-Ad

  • Повторно подключитесь к сеансу экрана после повторного входа в систему:

    $ screen -d -r
    
  • Откройте другое окно "окно": CTRL-Ac

  • Цикл через открытые окна экрана: CTRL-Aspace

Там есть много из классных вещей, которые вы можете сделать с экрана. Я использую его более 10 лет и до сих пор выясняю новые возможности. Это моя любимая утилита Unix.

64
Mike Pountney

Я не могу поверить, что никто не упомянул MOSH ;

Mosh - это отдельный протокол, который может подключиться к процессу входа в SSH, он поддерживает ваш сеанс после нескольких дней отключения, смены IP-адреса, высокой задержки и так далее. Это объясняется на домашней странице лучше, чем я могу объяснить, поэтому я скопировал описание ниже. Мой опыт и советы заключаются в том, что я использую его на своем Android мобильном телефоне, это спасает жизнь во время путешествий и работы по SSH. То же самое верно и для моего ноутбука, когда он привязан к мобильному телефону в поезде, например Я рекомендую компилировать из исходного кода, чтобы получить последнюю версию, для меня в репо-версии внутри Ubuntu есть несколько неприятностей, которые исправлены в самой последней версии (на момент написания).

Мош (мобильный Shell)

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

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

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

Особенности с сайта:

  • Изменить IP. Оставайтесь на связи : Mosh автоматически перемещается при переходе между подключениями к Интернету. Используйте Wi-Fi в поезде, Ethernet в отеле и LTE на пляже: вы останетесь в системе). Большинство сетевых программ теряют соединения после роуминга, включая SSH и такие веб-приложения, как Gmail. Мошь отличается.

  • Создает сладкие сны : С помощью Mosh вы можете перевести свой ноутбук в спящий режим и разбудить его позже, сохранив соединение без изменений. Если ваше интернет-соединение обрывается, Mosh предупредит вас, но соединение возобновится, когда услуга сети вернется.

  • Избавьтесь от сетевых задержек : SSH ждет ответа сервера, прежде чем показывать вам свой набор текста. Это может сделать для паршивого пользовательского интерфейса. Mosh отличается: он мгновенно реагирует на ввод, удаление и редактирование строк. Он делает это адаптивно и работает даже в полноэкранных программах, таких как emacs и vim. При плохой связи недооцененные прогнозы подчеркнуты, чтобы вас не вводили в заблуждение.

  • Нет привилегированного кода. No daemon : вам не нужно быть суперпользователем для установки или запуска Mosh. Клиент и сервер - это исполняемые файлы, запускаемые обычным пользователем и действующие только на время существования соединения.

  • Тот же метод входа в систему : Mosh не прослушивает сетевые порты и не проверяет подлинность пользователей. Клиент mosh входит на сервер через SSH, и пользователи представляют те же учетные данные (например, пароль, открытый ключ), что и раньше. Затем Mosh запускает mosh-сервер удаленно и подключается к нему через UDP.

  • Работает внутри вашего терминала, но лучше : Mosh - программа командной строки, как ssh. Вы можете использовать его внутри xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen или tmux. Но mosh был разработан с нуля и поддерживает только один набор символов: UTF-8. Это исправляет ошибки Unicode в других терминалах и в SSH.

  • Control-C отлично работает : в отличие от SSH, протокол mosh на основе UDP корректно обрабатывает потери пакетов и устанавливает частоту кадров в зависимости от состояния сети. Mosh не заполняет сетевые буферы, поэтому Control-C
    всегда работает, чтобы остановить безудержный процесс.

47
jwbensley

autossh наблюдает за вашим соединением и, если оно выходит из строя, соединяется заново. Это надежнее, чем keepalive. Если вы подключитесь к сеансу экрана, вы продолжите прямо с того места, где вы отключились (см. rscreen, поставляемый с autossh)

20
hayalci

tmux

Это классика. Используйте его всякий раз, когда вы рискуете потерять соединение с терминалом.

$ tmux
$ sh do_something_that_takes_forever

!! Connection fails so you reconnect once you notice

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0

Просто так, вы снова в действии.

14
Jacksonkr

Я бы установил и запустил экран, чтобы исправить вашу проблему. Экран позволит вам повторно подключиться к предыдущему сеансу экрана.

Кроме того, screen также позволяет вам делать интересные вещи, такие как разделение экрана, просмотр консоли и т.д. Вы можете найти больше информации здесь и здесь .

Для начала, если вы отключились, вы можете использовать

screen -ls

просматривать ваши сеансы и

screen -r ${session} 

восстановить соединение с отключенным.

10
wzzrd

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

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

Смотрите http://tlug.dnho.net/?q=node/239 (или поищите в Google множество других примеров, делающих слегка разные пути).

4
David Spillett

Вот еще одно неэкранное решение.

Лоток PuTTY позволяет вам сделать это, у него есть опция переподключения при отключении, которая не является обычной или PuTTY-ng

https://puttytray.goeswhere.com/

это (полностью открытый исходный код) ветвь PuTTY с другими опциями, перейдите к настройкам соединения и есть 2 варианта: один для "попытки переподключения при сбое соединения" и "попытка переподключения при запуске".

3
munkiepus

более современная альтернатива screen, увы, недоступная для некоторых типов "виртуализации" (например, в cygwin у вас может быть "screen", но не "tmux" из-за способа его разработки), но везде, где у вас есть возможность установить tmux Я настоятельно рекомендую перейти на этот экран.

3
cepal

Хотя screen будет держать ваш сеанс Shell открытым на удаленном сервере, если ваш сеанс ssh будет прерван, он ничего не решит с проблемой разрыва соединений ssh. Как подсказывает zero_r, попробуйте настроить ваше ssh-соединение с помощью keep aive и long timeout.

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

2
David

Иногда я тоже забывал запустить экран и терял свою незаконченную работу. В этом случае, хотя мы не можем присоединиться к прерванному сеансу SSH, переписывание запущенной программы на новый терминал и возобновление того, что вы делали, все еще возможно благодаря reptyr.

После случайного отключения от сеанса SSH первым делом нужно запустить screen, чтобы соединение не разорвалось. Затем в новом сеансе запустите ps aux | grep {The process to be resumed} чтобы получить PID. С PID вы можете попробовать reptyr {PID} или reptyr -T {PID} (если есть подпроцессы), чтобы продолжить работу.

2
march_happy