Хоча ви не можете повторно приєднати до зламаного сеансу 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те ж саме?