Назад | Перейти на главную страницу

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

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

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

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

ОБНОВЛЕНИЕ: для фактического ответа см. Ответ zero_r ниже

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

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

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

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

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

Основы:

  • Запустите сеанс экрана (на удаленном хосте):

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

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

    $ screen -d -r
    
  • Откройте другое окно экрана: CTRL-A, c

  • Циклическое переключение между открытыми вами окнами экрана: CTRL-A, пространство

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

Я не могу поверить, что никто не упомянул МОСХ;

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

Mosh (мобильная оболочка)

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

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

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

Возможности с сайта:

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

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

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

  • Нет привилегированного кода. Нет демона: Вам не нужно быть суперпользователем, чтобы установить или запустить 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
    всегда работает, чтобы остановить беглый процесс.

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

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

Вот так вы снова в действии.

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

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

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

screen -ls

для просмотра ваших сессий и

screen -r ${session} 

для переподключения к отключенному.

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

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

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

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

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

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

https://puttytray.goeswhere.com/

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

В то время как screen будет держать ваш сеанс оболочки открытым на удаленном сервере, если ваш сеанс ssh прерывается, он не будет ничего делать с проблемой сбрасывания ssh-соединений. Как предлагает zero_r, попробуйте настроить свое ssh-соединение с сохранением активности и длительными таймаутами.

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

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

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

Еще один вариант - запустить Jupyter Notebook, у которого есть собственный неплохой веб-эмулятор терминала.

Плюсы

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

Минусы

  • Я теряю историю консоли (не команды, а только прокрутку) после повторного подключения.

Как

  1. На some_host, бегать jupyter-notebook --no-browser --port=$SOME_PORT &.

  2. создать сеанс some_label в вашем браузере, указав на http://some_host:$SOMEPORT/terminals/some_label. Теперь вы можете отключиться.

  3. Добавьте свои сеансы в закладки. При повторном подключении вы можете открыть их все сразу. Если вкладки уже открыты, вам нужно будет обновить их.

Если $SOME_PORT не открыт на some_host, затем используйте ssh для переадресации портов и подключения к http://localhost:$SOME_LOCAL_PORT/terminals/some_label вместо:

ssh -q -N -f -L localhost:$SOME_LOCAL_PORT:localhost:$SOME_PORT $some_host