Хоча ви не можете повторно приєднати до зламаного сеансу 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
Потім, зі знайденим вами підписом для вашого процесу:
$ 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
те ж саме?