Хотя вы не можете присоединиться к прерванному сеансу SSH, вы можете переписать процесс, работающий внутри SSH, - функционально эквивалентный тому, что вы хотите.
инструкции
В вашем случае вы бы взяли на себя управление apt-getпроцессом из нового сеанса SSH, screenсеанса или тому подобного. Моя любимая для этого reptyrкоманда:
$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8 R+ 0:32 apt-get upgrade
Затем с pid, который вы нашли для вашего процесса:
$ sudo reptyr -T 10626
Или, если это не работает, попробуйте:
$ reptyr 10626
После этой стадии весь ваш ввод с клавиатуры идет в программу, которую вы взяли на себя. К сожалению, вы не увидите старые выходные данные сеанса SSH, такие как apt-getвыходные данные, запрашивающие у вас подтверждение.
Пояснения
Есть несколько других инструментов, которые в основном работают так же, как reptyr(то есть через ptraceотладочное вложение). Смотрите следующие вопросы и ответы, где они обсуждаются:
В приведенных выше инструкциях reptyr 10626используется ptraceотладочное вложение, в то время как sudo reptyr -T 10626команда использует воровство TTY и является предпочтительной ( подробности ).
Наконец, причина, по которой вы не можете принять сеанс SSH таким способом, заключается в том, что sshdпроцесс не контролируется хост-терминалом, вместо этого он предоставляет подчиненную часть терминала - ptsустройство, в то время как ведущая часть, управляющая им, находится на клиентская машина, здесь с разбитым сеансом SSH между ними. Когда вы принудительно берете такой sshdпроцесс на себя reptyr -s <pid>, ваш ввод с клавиатуры переходит к этому процессу, а не к его активному дочернему процессу. Так что «Ctrl + Z» просто убьет это sshd.
apt-getпроцесс все еще запущен. Он должен был умереть вместе со всей цепочкой процессов вплоть до SSH. Я заметил, чтоdo-dist-upgradeавтоматически запускается вscreen/byobuсессии: может быть, в некоторых случаях,apt-getто же самое?