Embora não seja possível reconectar a uma sessão SSH quebrada, é possível reparar novamente o processo em execução no SSH - funcionalmente equivalente ao que você deseja.
Instruções
No seu caso, você assumiria o apt-getprocesso a ser controlado a partir de uma nova sessão SSH, screensessão ou similar. O meu favorito para isso é o reptyrcomando:
$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8 R+ 0:32 apt-get upgrade
Então, com o pid que você encontrou para o seu processo:
$ sudo reptyr -T 10626
Ou, se isso não funcionar, tente:
$ reptyr 10626
Após esse estágio, toda a entrada do teclado vai para o programa que você assumiu. Infelizmente, você não verá a saída antiga da sessão SSH, como a apt-getsaída solicitando sua confirmação.
Explicações
Existem várias outras ferramentas que basicamente funcionam da mesma forma reptyr(ou seja, via ptraceanexo de depuração). Consulte as seguintes perguntas e respostas onde elas são discutidas:
Nas instruções acima, ele reptyr 10626usa o ptraceanexo de depuração enquanto o sudo reptyr -T 10626comando usa o roubo de TTY e é preferível ( detalhes ).
Finalmente, a razão pela qual você não pode assumir uma sessão SSH dessa maneira é porque um sshdprocesso não é controlado por um terminal host, mas fornece a parte escrava de um terminal - um ptsdispositivo - enquanto a parte principal que o controla reside no máquina cliente, aqui com uma sessão SSH dividida no meio. Quando você força a assumir esse sshdprocesso reptyr -s <pid>, a entrada do teclado vai para esse processo, não para o processo filho ativo. Portanto, um "Ctrl + Z" simplesmente elimina isso sshd.
apt-getprocesso ainda estivesse em execução. Deveria ter morrido junto com toda a cadeia do processo até o SSH. Notei quedo-dist-upgradecomeça automaticamente em uma sessãoscreen/byobu: talvez em algumas circunstâncias,apt-getfaça o mesmo?