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-get
proses untuk dikendalikan dari sesi SSH baru , screen
sesi atau sejenisnya. Favorit saya untuk ini adalah reptyr
perintah:
$ 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-get
output yang meminta Anda untuk konfirmasi.
Penjelasan
Ada beberapa alat lain yang pada dasarnya bekerja sama dengan reptyr
(yaitu, melalui ptrace
lampiran debug). Lihat pertanyaan dan jawaban berikut di mana mereka dibahas:
Dalam instruksi di atas, reptyr 10626
menggunakan ptrace
lampiran debug sementara sudo reptyr -T 10626
perintah menggunakan mencuri TTY dan lebih disukai ( detail ).
Akhirnya, alasan mengapa Anda tidak dapat mengambil alih sesi SSH dengan cara ini adalah karena suatu sshd
proses tidak dikontrol oleh terminal host, alih-alih memberikan bagian slave dari terminal - pts
perangkat - sedangkan bagian master yang mengendalikannya berada pada mesin klien, di sini dengan sesi SSH yang rusak di antaranya. Saat Anda memaksa mengambil alih sshd
proses 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-get
prosesnya masih berjalan. Seharusnya mati bersama dengan seluruh rantai proses hingga SSH. Saya perhatikan bahwado-dist-upgrade
secara otomatis dimulai pada sesiscreen
/byobu
: mungkin dalam beberapa keadaan,apt-get
apakah sama?