Есть ли способ подключиться к сеансу 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
$ 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, у которого есть собственный неплохой веб-эмулятор терминала.
На some_host
, бегать jupyter-notebook --no-browser --port=$SOME_PORT &
.
создать сеанс some_label
в вашем браузере, указав на http://some_host:$SOMEPORT/terminals/some_label
. Теперь вы можете отключиться.
Добавьте свои сеансы в закладки. При повторном подключении вы можете открыть их все сразу. Если вкладки уже открыты, вам нужно будет обновить их.
Если $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