Pertanyaan Bagaimana saya bisa terhubung kembali ke sesi ssh setelah pipa rusak?


Jadi saya berlari apt-get upgrade pada server ketika router memutuskan sudah terlalu lama sejak terakhir membuat saya marah: Ini menjatuhkan semua koneksi. Moral dari cerita ini adalah untuk digunakan screen banyak ketika Anda berada di router bum.

Anyway, saya masuk kembali dan menemukan di htop bahwa proses itu masih menggantung di sana, masih menunggu Y / n saya untuk meningkatkan (belum memukulnya, untungnya). Apakah ada cara saya dapat memasang kembali ke sesi yang telah putus? Saya akhirnya membunuhnya karena bukan di tengah manajemen paket tetapi akan sangat bagus untuk mengetahui referensi di masa mendatang.


21
2017-09-22 03:49


asal


Saya terkejut apt-get proses masih berjalan. Seharusnya mati bersama dengan seluruh rantai proses hingga SSH. Saya perhatikan itu do-dist-upgrade otomatis dimulai dalam screen/byobu sesi: mungkin dalam beberapa keadaan, apt-get melakukan hal yang sama? - nfirvine


Jawaban:


Jawaban atas pertanyaan Anda yang tepat adalah: kamu tidak bisa. Saya pikir masalah utama adalah bahwa prosedur otentikasi akan tidak sinkron. Hanya Tidak Bekerja Seperti Itu.

Seperti yang Anda perhatikan, solusinya adalah menggunakan layar bila memungkinkan (ngomong-ngomong, tmux adalah alternatif untuk layar).


14
2017-09-28 10:11



Terima kasih telah mengkonfirmasi kecurigaan saya.
Tetapi bagaimana jika Anda memiliki ssh tanpa password? Bisakah kamu melakukannya? - Sridhar-Sarnobat
byobu adalah akhir front yang bagus dan mudah digunakan screen (atau tmux) - pasti layak dilihat (: - drevicko


Untuk menjalankan proses yang tahan lama, saya menggunakan layar, atau byobu jika Anda ingin antarmuka yang lebih ramah.

Untuk layar, Anda dapat menggunakan:

screen [program] [args]

Ini akan menjalankan [program] dan [args] di dalam a layar sidang. Setelah program selesai, sesi secara otomatis ditutup. Jika Anda ingin mempertahankan sesi setelah program Anda berjalan, jalankan saja layar tanpa argumen dan prompt baru akan muncul di dalam sesi. CTRL + A + D lepaskan terminal dari sesi saat ini.

Untuk melampirkan kembali ke sesi sebelumnya:

screen -r

Jika hanya ada satu sesi yang terbuka, itu akan segera dipasang kembali. Jika beberapa sesi sedang berlangsung, itu akan menanyakan Anda yang mana yang ingin Anda lampirkan. Jika Anda tahu nama sesi, Anda bisa menambahkannya sebagai argumen ke baris perintah ini.

Byobu adalah peningkatan yang bagus. Ini didasarkan pada layar, tetapi menyediakan bar di bagian bawah yang menunjukkan semua sesi saat ini sebagai tab dan memberikan pintasan yang lebih mudah untuk bergerak di sekitar itu. Kamu bisa:

  • F2 memulai sesi baru
  • F3 pindah ke tab sesi berikutnya di sebelah kiri
  • F4 pindah ke tab sesi berikutnya di sebelah kanan
  • F8 memberikan nama yang ramah ke tab sesi saat ini
  • F9 membuka menu opsi
  • CTRL + A + D melepaskan semua sesi dari terminal.

WORD OF ADVICE: hindari meninggalkan sesi yang dibuka dengan pengguna akar. Jika ada yang mendapatkan akses ke terminal Anda (secara lokal atau jarak jauh), mereka dapat dengan mudah memasang kembali ke sesi yang sedang berlangsung dan menggunakan sistem Anda sebagai root. Jika diperlukan, sebaiknya mulai sesi menggunakan pengguna umum dan sudo baris perintah indivudis seperlunya.


8
2017-09-27 21:44



Perkenankan saya mengutip OP: "Moral dari cerita ini adalah untuk gunakan layar banyak. "Ternyata itu bukan pertanyaan di sini. - January
Terima kasih atas Langgan tetapi Januari sudah benar.
Gunakan layar sudo <command> untuk mengatur layar sebagai root, yang memerlukan akses sudo untuk menyambung kembali ke sana. Jauh lebih baik daripada memulai layar secara normal, lalu berubah menjadi root di dalamnya. - djsmiley2k


Meskipun Anda tidak dapat memasang kembali ke sesi SSH yang rusak, Anda dapat memperbaiki proses yang berjalan di dalam - secara fungsional setara dengan apa yang Anda inginkan.

Dalam kasus Anda, Anda akan mengambil alih apt-get proses harus dikontrol dari baru Sesi SSH, screen sesi 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:

$ reptyr 10626

Setelah tahap ini, semua input keyboard Anda masuk ke program yang Anda ambil alih. Sayangnya Anda tidak akan melihat output lama dari sesi SSH, seperti apt-get output meminta Anda untuk konfirmasi.

Ada beberapa alat lain yang pada dasarnya berfungsi sama reptyr (yaitu, via ptrace lampiran debug). Lihat pertanyaan dan jawaban berikut di mana mereka dibahas:

(Detail: Alasan Anda tidak dapat mengambil alih sesi SSH dengan cara ini adalah karena a sshd proses tidak dikontrol oleh terminal host, melainkan itu menyediakan bagian budak dari terminal - a pts perangkat - sementara bagian utama yang mengendalikannya berada di mesin klien, di sini dengan sesi SSH rusak di antaranya. Ketika Anda memaksa mengambil alih seperti itu sshd proses dengan reptyr -s <pid>, input keyboard Anda masuk ke proses itu, bukan proses anak yang aktif. Jadi "Ctrl + Z" hanya akan mematikan itu sshd.)


5
2018-02-16 14:12