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-get
processo a ser controlado a partir de uma nova sessão SSH, screen
sessão ou similar. O meu favorito para isso é o reptyr
comando:
$ 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-get
saída solicitando sua confirmação.
Explicações
Existem várias outras ferramentas que basicamente funcionam da mesma forma reptyr
(ou seja, via ptrace
anexo de depuração). Consulte as seguintes perguntas e respostas onde elas são discutidas:
Nas instruções acima, ele reptyr 10626
usa o ptrace
anexo de depuração enquanto o sudo reptyr -T 10626
comando 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 sshd
processo não é controlado por um terminal host, mas fornece a parte escrava de um terminal - um pts
dispositivo - 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 sshd
processo 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-get
processo ainda estivesse em execução. Deveria ter morrido junto com toda a cadeia do processo até o SSH. Notei quedo-dist-upgrade
começa automaticamente em uma sessãoscreen
/byobu
: talvez em algumas circunstâncias,apt-get
faça o mesmo?