Хотя вы не можете присоединиться к прерванному сеансу 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
то же самое?