Meskipun Anda tidak dapat memasang kembali ke sesi SSH yang rusak, Anda dapat melakukan proses yang berjalan di dalam SSH - yang secara fungsional setara dengan apa yang Anda inginkan.
Instruksi
Dalam kasus Anda, Anda akan mengambil alih apt-getproses untuk dikendalikan dari sesi SSH baru , screensesi atau sejenisnya. Favorit saya untuk ini adalah reptyrperintah:
$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8 R+ 0:32 apt-get upgrade
Kemudian, dengan pid yang Anda temukan untuk proses Anda:
$ sudo reptyr -T 10626
Atau jika itu tidak berhasil, coba:
$ reptyr 10626
Setelah tahap ini, semua input keyboard Anda masuk ke program yang Anda ambil. Sayangnya Anda tidak akan melihat output lama dari sesi SSH, seperti apt-getoutput yang meminta Anda untuk konfirmasi.
Penjelasan
Ada beberapa alat lain yang pada dasarnya bekerja sama dengan reptyr(yaitu, melalui ptracelampiran debug). Lihat pertanyaan dan jawaban berikut di mana mereka dibahas:
Dalam instruksi di atas, reptyr 10626menggunakan ptracelampiran debug sementara sudo reptyr -T 10626perintah menggunakan mencuri TTY dan lebih disukai ( detail ).
Akhirnya, alasan mengapa Anda tidak dapat mengambil alih sesi SSH dengan cara ini adalah karena suatu sshdproses tidak dikontrol oleh terminal host, alih-alih memberikan bagian slave dari terminal - ptsperangkat - sedangkan bagian master yang mengendalikannya berada pada mesin klien, di sini dengan sesi SSH yang rusak di antaranya. Saat Anda memaksa mengambil alih sshdproses semacam itu reptyr -s <pid>, input keyboard Anda mengarah ke proses itu, bukan proses anak yang aktif. Jadi "Ctrl + Z" hanya akan mematikan itu sshd.
apt-getprosesnya masih berjalan. Seharusnya mati bersama dengan seluruh rantai proses hingga SSH. Saya perhatikan bahwado-dist-upgradesecara otomatis dimulai pada sesiscreen/byobu: mungkin dalam beberapa keadaan,apt-getapakah sama?