Есть ли способ подключиться к сеансу ssh, который был отключен? У нас проблемы с сетевым подключением к удаленному сайту, над которым мы работаем отдельно; тем не менее, в то же время мы испытываем большое количество отключений из-за потерянных пакетов при подключении к серверам в удаленном местоположении. Часто сеанс некоторое время остается активным, а иногда это происходит в середине какого-либо действия (редактирование файла, запуск какого-либо процесса и т. Д.), К которому мне нужно вернуться, а не перезапустить, если это возможно.
linux
ssh
gnu-screen
бледная лошадь
источник
источник
Ответы:
ОБНОВЛЕНИЕ: для фактического ответа см. Ответ zero_r ниже
Это не ответ, а обходной путь. Используйте экран .
При первом входе в систему запустите экран. Вы получаете другую оболочку, запускаете команды в этом. Если вы отключены, экранный процесс поддерживает работу терминала, чтобы ваша оболочка и процессы, на которых он работает, не падали. При повторном подключении запустите 'screen -r', чтобы продолжить.
Существует множество способов настройки и использования экрана, но вышеприведенное должно решить вашу проблему.
источник
screen
он уже установлен на моем Ubuntu 12.x, поэтому, если вы не уверены, просто попробуйте эту команду, она переподключится и возобновит процесс do-release-upgrade : sudo screen -D -rsudo
следует использовать только в том случае, если исходный сеанс экрана был инициирован с помощью sudo. В противном случае он вернется, как если бы не было сеанса экрана:There is no screen to be detached
screen -r
было именно то , что я искал.Попробуйте установить ClientAliveInterval (например, 60) и TCPKeepAlive (да или нет) в соответствующие значения на стороне сервера sshd.conf.
Это должно поддерживать ваш сеанс, даже если соединение теряется на несколько минут.
источник
Как уже упоминалось выше, GNU Screen - это путь. Это позволит вам иметь «сеанс экрана» на удаленном блоке, в котором вы можете запускать несколько команд через несколько «окон экрана». Он просто отсоединится, если ваше родительское SSH-соединение прекратит работу, и все подпроцессы, работающие в нем, будут работать нормально.
'
man screen
' ваш друг как обычно, и пакет ОС должен называться 'screen
', если он не установлен по умолчанию.Основы:
Начните сеанс экрана (на вашем удаленном хосте):
Отключение от вашего экрана сессии: CTRL-A,d
Повторно подключитесь к сеансу экрана после повторного входа в систему:
Откройте другое «окно» экрана: CTRL-A,c
Цикл через вас открыт экран окно: CTRL-A,space
Есть много интересных вещей, которые вы можете сделать с помощью Screen. Я использую его более 10 лет и до сих пор выясняю новые возможности. Это моя любимая утилита Unix.
источник
Я не могу поверить, что никто не упомянул MOSH ;
Mosh - это отдельный протокол, который может подключиться к процессу входа в систему SSH, он поддерживает ваш сеанс после нескольких дней отключения, смены IP-адреса, высокой задержки и так далее. Это объясняется на домашней странице лучше, чем я могу объяснить, поэтому я скопировал описание ниже. Мой опыт и советы таковы, что я использую его на своем мобильном телефоне Android, это спасает жизнь во время путешествий и SSH'ing. То же самое верно для моего ноутбука, когда он привязан к мобильному телефону в поезде, например. Я рекомендую компилировать из исходного кода, чтобы получить последнюю версию, для меня в репо-версии внутри Ubuntu есть несколько неприятностей, которые исправлены в самой последней версии (на момент написания).
Особенности с сайта:
Сменить IP. Оставайтесь на связи : Mosh автоматически перемещается при переходе между подключениями к Интернету. Используйте Wi-Fi в поезде, Ethernet в отеле и LTE на пляже: вы останетесь в системе. Большинство сетевых программ теряют соединения после роуминга, включая SSH и веб-приложения, такие как Gmail. Мош это другое.
Создает сладкие сны : с помощью Mosh вы можете уложить свой ноутбук в спящий режим и разбудить его позже, сохраняя соединение в целости и сохранности. Если ваше интернет-соединение обрывается, 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
всегда работает, чтобы остановить процесс разгона.
источник
autossh наблюдает за вашим подключением и, если оно выходит из строя, подключается заново Это надежнее, чем keepalive. Если вы подключитесь к сеансу экрана, вы продолжите прямо с того места, где вы отключились (смотрите,
rscreen
что идет с autossh)источник
rscreen
для этого.tmux
Это классика. Используйте его всякий раз, когда вы рискуете потерять соединение с терминалом.
Просто так, вы снова в действии.
источник
Я бы установил и запустил экран, чтобы исправить вашу проблему. Экран позволит вам повторно подключиться к предыдущему сеансу экрана.
Кроме того, screen также позволяет вам делать интересные вещи, такие как разделение экрана, просмотр консоли и т. Д. Более подробную информацию вы можете найти здесь и здесь .
Для начала, если вы отключились, вы можете использовать
просматривать ваши сеансы и
восстановить соединение с отключенным.
источник
Как уже отмечали другие, экран, как правило, является лучшим решением для этого, и он также добавляет множество других полезных функций.
Вы можете настроить свой профиль на удаленном компьютере так, чтобы он автоматически запускался и / или снова подключался к экрану при входе в систему, что избавляет вас от необходимости запускать экран в тот раз, когда он вам нужен, потому что у вас пропадает соединение.
См. Http://tlug.dnho.net/?q=node/239 (или поищите в Google множество других примеров, сделанных немного по-другому).
источник
более современная альтернатива screen, увы, недоступная для некоторых типов «виртуализации» (например, в cygwin у вас может быть «screen», но не «tmux» из-за того, как он спроектирован), но везде, где у вас есть возможность установить tmux Я настоятельно рекомендую перейти на этот экран.
источник
Вот еще одно неэкранное решение.
Лоток для замазки позволяет вам сделать это, у него есть опция переподключения при отключении, которая отсутствует в обычной или putty-ng
https://puttytray.goeswhere.com/
это (полностью открытый исходный код) ветвь замазки с другими опциями, перейдите к настройкам соединения и есть 2 варианта, один для «попытки переподключения при сбое соединения» и «попытка переподключения при запуске».
источник
Хотя screen будет держать ваш сеанс оболочки открытым на удаленном сервере, если ваш ssh-сеанс будет прерван, он ничего не решит с проблемой потери соединений ssh. Как подсказывает zero_r, попробуйте настроить ssh-соединение с помощью keep alives и long timeouts.
Я предлагаю вам отследить причину потерянных пакетов, вызывающих проблемы, и исправить это, вместо того чтобы обходить их.
источник
Иногда я тоже забывал запустить экран и терял свою незаконченную работу. В этом случае, хотя мы не можем присоединиться к прерванному сеансу SSH, переписать запущенную программу на новый терминал и возобновить то, что вы делали, все еще возможно благодаря
reptyr
.После случайного отключения от сеанса SSH первым делом нужно запустить,
screen
чтобы соединение не разорвалось. Затем в новом сеансе запустите,ps aux | grep {The process to be resumed}
чтобы получить PID. С помощью PID вы можете попытатьсяreptyr {PID}
илиreptyr -T {PID}
(если есть подпроцессы) продолжить работу.источник