Apakah ada cara untuk terhubung ke sesi ssh yang terputus? Kami mengalami masalah dengan koneksi jaringan kami ke situs jarak jauh yang sedang kami kerjakan secara terpisah; namun, sementara itu kami mengalami sejumlah besar pemutusan karena paket yang hilang saat terhubung ke server di lokasi yang jauh. Sering kali sesi tetap aktif untuk sementara waktu, dan kadang-kadang terjadi di tengah-tengah beberapa tindakan (mengedit file, menjalankan beberapa proses, dll ...) yang saya butuhkan untuk kembali daripada memulai kembali jika mungkin.
linux
ssh
gnu-screen
kuda pucat
sumber
sumber
Jawaban:
PEMBARUAN: Untuk jawaban aktual, lihat jawaban zero_r di bawah ini
Ini bukan jawaban, tapi solusi. Gunakan layar .
Ketika Anda pertama kali masuk, jalankan layar. Anda mendapatkan shell lain, jalankan perintah di dalamnya. Jika Anda terputus, proses layar menjaga terminal tetap hidup sehingga shell Anda dan proses yang sedang berjalan tidak jatuh. Saat Anda terhubung kembali, jalankan 'layar -r' untuk melanjutkan.
Ada banyak lagi yang harus dikonfigurasikan dan menggunakan layar, tetapi hal di atas seharusnya bisa menyelesaikan masalah Anda.
sumber
screen
sudah terinstal di Ubuntu 12.x saya jadi jika Anda tidak yakin coba saja perintah ini, itu memang menyambung kembali dan melanjutkan proses do-release-upgrade : layar sudo -D -rsudo
harus digunakan hanya jika sesi layar asli dimulai dengan sudo. Kalau tidak, itu akan kembali seolah-olah tidak ada sesi layar:There is no screen to be detached
screen -r
itu persis apa yang saya cari.Cobalah untuk mengatur ClientAliveInterval (mis. 60) dan TCPKeepAlive (ya atau tidak) ke nilai yang sesuai di server sshd.conf.
Ini akan membuat sesi Anda tetap hidup meskipun koneksi hilang selama beberapa menit.
sumber
Seperti disebutkan di atas, Layar GNU adalah caranya. Ini akan memungkinkan Anda untuk memiliki 'sesi layar' pada kotak jarak jauh di mana Anda dapat menjalankan banyak perintah, melalui beberapa 'layar windows'. Ini hanya akan melepaskan jika koneksi SSH orang tua Anda mati, menjaga semua subproses berjalan di dalamnya hidup dan sehat.
'
man screen
' adalah teman Anda seperti biasa, dan paket OS harus dipanggil 'screen
' jika tidak diinstal secara default.Dasar-dasarnya adalah:
Mulai sesi layar (pada host jarak jauh Anda):
Memutuskan sambungan dari sesi layar Anda: CTRL-A,d
Sambungkan kembali ke sesi layar Anda setelah masuk kembali:
Buka lain layar 'jendela': CTRL-A,c
Siklus melalui Anda layar terbuka jendela: CTRL-A,space
Ada banyak hal keren yang bisa Anda lakukan dengan Layar. Saya telah menggunakannya selama lebih dari 10 tahun, dan masih mencari tahu fitur-fitur baru. Ini utilitas Unix favorit saya.
sumber
Saya tidak percaya tidak ada yang menyebutkan MOSH ;
Mosh adalah protokol terpisah yang dapat menghubungkan ke proses login SSH, itu membuat sesi Anda tetap hidup setelah berhari-hari terputus, mengubah IP, latensi tinggi dan sebagainya. Itu dijelaskan di halaman rumah lebih baik daripada yang bisa saya jelaskan sehingga saya telah menyalin deskripsi di bawah ini. Pengalaman dan saran saya adalah bahwa saya menggunakannya di ponsel Android saya, ini adalah penyelamat saat bepergian dan SSH'ing. Hal yang sama berlaku di laptop saya ketika ditambatkan dengan ponsel di kereta misalnya. Saya merekomendasikan kompilasi dari sumber untuk mendapatkan versi terbaru, versi repo untuk saya di dalam Ubuntu memiliki beberapa gangguan di dalamnya yang diperbaiki dalam versi terbaru (pada saat penulisan).
Fitur dari situs web:
Ubah IP. Tetap terhubung : Mosh otomatis menjelajah saat Anda bergerak di antara koneksi Internet. Gunakan Wi-Fi di kereta, Ethernet di hotel, dan LTE di pantai: Anda akan tetap masuk. Sebagian besar program jaringan kehilangan koneksi setelah roaming, termasuk SSH dan aplikasi Web seperti Gmail. Mosh berbeda.
Membuat mimpi indah : Dengan Mosh, Anda dapat meletakkan laptop Anda untuk tidur dan membangunkannya nanti, menjaga koneksi Anda tetap utuh. Jika koneksi Internet Anda turun, Mosh akan memperingatkan Anda - tetapi koneksi kembali ketika layanan jaringan kembali.
Singkirkan jeda jaringan : SSH menunggu balasan server sebelum menunjukkan kepada Anda pengetikan Anda sendiri. Itu bisa membuat antarmuka pengguna yang buruk. Mosh berbeda: ia memberikan respons instan untuk mengetik, menghapus, dan mengedit garis. Ia melakukan ini secara adaptif dan bekerja bahkan dalam program layar penuh seperti emacs dan vim. Pada koneksi yang buruk, prediksi luar biasa digarisbawahi sehingga Anda tidak akan disesatkan.
Tidak ada kode istimewa. Tanpa daemon : Anda tidak perlu menjadi pengguna super untuk menginstal atau menjalankan Mosh. Klien dan server adalah executable yang dijalankan oleh pengguna biasa dan hanya berlangsung selama umur koneksi.
Metode login yang sama : Mosh tidak mendengarkan port jaringan atau mengautentikasi pengguna. Klien mosh masuk ke server melalui SSH, dan pengguna menyajikan kredensial yang sama (misalnya, kata sandi, kunci publik) seperti sebelumnya. Kemudian Mosh menjalankan mosh-server dari jarak jauh dan menghubungkannya melalui UDP.
Berjalan di dalam terminal Anda, tetapi lebih baik : Mosh adalah program baris perintah, seperti ssh. Anda dapat menggunakannya di dalam xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, layar, atau tmux. Tapi mosh dirancang dari awal dan hanya mendukung satu set karakter: UTF-8. Ini memperbaiki bug Unicode di terminal lain dan di SSH.
Control-C berfungsi dengan baik : Tidak seperti SSH, protokol berbasis UDP mosh menangani kehilangan paket dengan anggun, dan menetapkan kecepatan bingkai berdasarkan kondisi jaringan. Mosh tidak mengisi buffer jaringan, jadi Control-C
selalu bekerja untuk menghentikan proses pelarian.
sumber
autossh melihat koneksi Anda dan jika koneksi turun, koneksi kembali. Ini lebih dapat diandalkan daripada keepalives. Jika Anda terhubung ke sesi layar, Anda akan melanjutkan langsung dari tempat Anda terputus (lihat
rscreen
yang datang dengan autossh)sumber
rscreen
untuk ini.tmux
Yang ini klasik. Gunakan setiap kali Anda berisiko kehilangan koneksi ke terminal.
Sama seperti itu, Anda kembali beraksi.
sumber
Saya akan menginstal dan memulai layar untuk memperbaiki masalah Anda. Layar akan memungkinkan Anda terhubung kembali ke sesi layar sebelumnya.
Selain itu, layar juga memungkinkan Anda melakukan hal-hal keren seperti membagi layar, melihat konsol, dll. Anda dapat menemukan info lebih lanjut di sini dan di sini .
Sebagai permulaan, jika Anda terputus, Anda dapat menggunakan
untuk melihat sesi Anda dan
untuk menyambung kembali ke yang terputus.
sumber
Seperti yang telah ditunjukkan oleh orang lain, layar umumnya merupakan solusi terbaik untuk ini dan ia menambahkan sejumlah fitur berguna lainnya juga.
Anda dapat mengatur profil Anda pada mesin jarak jauh untuk secara otomatis memulai dan / atau menyambung kembali ke layar saat login, yang membuat Anda lupa untuk memulai layar pada saat Anda membutuhkannya karena Anda mengalami penurunan koneksi.
Lihat http://tlug.dnho.net/?q=node/239 (atau cari Google untuk banyak contoh lainnya dengan cara yang sedikit berbeda).
sumber
alternatif yang lebih modern untuk layar, sayangnya tidak tersedia untuk beberapa jenis "virtualisasi" (misalnya di cygwin Anda dapat memiliki "layar", tetapi tidak "tmux" karena cara itu dirancang), tetapi di mana pun Anda memiliki pilihan untuk menginstal tmux , Saya sangat merekomendasikan untuk menggunakan insted layar itu.
sumber
Berikut ini adalah solusi non-layar lainnya.
Baki dempul memungkinkan Anda untuk melakukan hal itu, ia memiliki koneksi ulang pada opsi putuskan yang tidak biasa atau dempul-ng
https://puttytray.goeswhere.com/
itu adalah garpu (sepenuhnya open source) dari dempul dengan opsi lain, pergi ke pengaturan koneksi dan ada 2 pilihan, satu untuk 'upaya untuk menyambung kembali pada kegagalan koneksi', dan 'upaya untuk menghubungkan kembali pada startup'.
sumber
Sementara layar akan membuat sesi shell Anda terbuka di server jauh jika sesi ssh Anda turun, itu tidak akan melakukan apa-apa tentang masalah koneksi ssh yang dijatuhkan. Seperti yang disarankan zero_r, coba setel koneksi ssh Anda dengan tetap hidup dan batas waktu lama.
Saya sarankan Anda melacak penyebab hilangnya paket yang menyebabkan masalah dan memperbaikinya alih-alih mengatasinya.
sumber
Terkadang saya lupa untuk menjalankan layar juga dan kehilangan pekerjaan saya yang belum selesai. Dalam hal ini, meskipun kami tidak dapat melampirkan kembali ke sesi SSH yang rusak, memperbaiki program yang sedang berjalan ke terminal baru dan melanjutkan apa yang Anda lakukan masih dimungkinkan berkat
reptyr
.Setelah secara tidak sengaja terputus dari sesi SSH, hal pertama yang pertama adalah menjalankan
screen
agar koneksi tidak terputus lagi. Kemudian di sesi baru, jalankanps aux | grep {The process to be resumed}
untuk mendapatkan PID. Dengan PID, Anda dapat mencobareptyr {PID}
ataureptyr -T {PID}
(jika ada subproses) untuk melanjutkan pekerjaan.sumber