terminal hang ketika koneksi terputus dan ssh aktif

18

ketika saya ssh ke server melalui internet di tab terminal gnome, jika saya kehilangan koneksi internet, tab terminal akan hang dan tidak menerima input apa pun. Kenapa digantung?

Apakah ada cara untuk mengaktifkan tab terminal, yaitu membuatnya terus menjalankan proses shell lokal?

Apakah menutup tab terminal satu-satunya cara?

StackExchange untuk Semua
sumber

Jawaban:

20

Koneksi SSH turun secara otomatis setelah periode waktu tertentu yang ditetapkan oleh ClientAliveIntervaldan ClientAliveCountMaxparameter dan setara sisi klien mereka. Jika batas waktu ini cukup tinggi, Anda akan mengalami kulit beku. Namun, jika Anda menggunakan OpenSSHAnda tidak harus menunggu waktu habis dan dapat memaksa menutup koneksi menggunakan karakter melarikan diri :

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

Ketika koneksi macet tekan ~(artinya Shift+ `kunci bersamaan), lepaskan dan tekan .. Atau, jika Anda bekerja dengan koneksi yang tidak stabil atau perlu terhubung ke server jarak jauh setiap saat Anda dapat menggunakan autossh untuk secara otomatis memperbarui koneksi yang hilang, itu sangat nyaman.

EDIT :

Namun, jika keduanya ClientAliveIntervaldan ServerAliveIntervaldiatur ke 0 secara eksplisit atau tidak diatur secara eksplisit dan kemudian diatur ke 0 secara default sesuai dengan sshd_configdan ssh_confighalaman manual, pengaturan batas waktu diatur dalam file berikut (dari http://tldp.org/HOWTO/TCP- Keepalive-HOWTO / usingkeepalive.html ):

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

Anda dapat memodifikasi 3 file ini hanya dengan menggunakan echodan melihat sendiri bahwa sesi SSH beku terputus sesuai dengan nilai-nilai ini.

Arkadiusz Drabczyk
sumber
6
Saya ingin menambahkan bahwa ssh hanya mengenali karakter pelariannya pada awalnya, atau setelah Enter. Ketika koneksi ssh macet, Enter seringkali tetapi tidak selalu merupakan karakter terakhir yang Anda tekan sebelumnya. Jadi mungkin lebih baik membiasakan diri Enter ~ .sebagai urutan yang mengakhiri koneksi.
egmont
Terima kasih. Saya masih tidak jelas bagaimana /proc/sys/net/ipv4/tcp_keepalive*file dan ClientAliveIntervaldan ServerAliveInterval bekerja bersama? Apakah mereka semua untuk pengaturan yang sama yaitu untuk menjaga koneksi ssh tetap hidup? Apakah file-file sebelumnya tidak hanya untuk koneksi ssh tetapi juga koneksi TCP lainnya?
StackExchange for All
Pertanyaan lain: mengapa "Jika batas waktu ini cukup tinggi Anda akan mengalami cangkang beku." Apa yang Anda maksud dengan "waktu tunggu cukup tinggi"? Bukankah cangkang selalu beku, jika kurang aktivitas untuk jangka waktu tertentu? atau maksud Anda dalam beberapa kasus kurangnya aktivitas, shell tidak beku tetapi keluar secara otomatis?
StackExchange for All
@Tim: 1. /proc/sys/net/ipv4/tcp_keepalive*tidak hanya untuk ssh(d)tetapi seperti yang tertulis dalam dokumen yang saya Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
tautkan
@Tim: 2. Cukup tinggi artinya 2 jam misalnya - Anda harus menunggu selama 2 jam sebelum sesi akan terputus. Lakukan tes - sambungkan dengan host jarak jauh, bunuh sshdpada remote atau lepaskan kabel dan periksa kapan sesi yang membeku ssh akan keluar dengan sendirinya. Dengan frozen shellsaya berarti shell yang tidak aktif, tidak mengambil kunci apapun dan tidak mencetak apa pun.
Arkadiusz Drabczyk