Bagaimana cara melepaskan port pada server SSH ketika sebuah terowongan ssh terbalik tiba-tiba / tidak bersih?

19

Kami memiliki beberapa perangkat keras yang kami pasang di lokasi pelanggan kami, perangkat keras itu terhubung ke server ssh kami dan membuat terowongan ssh terbalik sehingga kami dapat memperoleh akses ke beberapa sistem klien untuk keperluan pemantauan.

Semuanya berfungsi dengan baik sampai ada pemutusan yang tidak bersih dari sesi SSH.

Ketika itu terjadi, pada server SSH kami port yang digunakan oleh terowongan terbalik tetap terjebak dalam mode MENDENGARKAN dan ketika perangkat keras jarak jauh kami akhirnya mencoba untuk menyambung kembali secara otomatis dan membangun kembali terowongannya, ia gagal dengan kesalahan.

Peringatan: penerusan port jarak jauh gagal untuk mendengarkan port XXXX

Saya menguji apakah ada masalah dengan server atau klien SSH kami dengan mencoba putuskan sambungan bersih dan tentu saja yang melepaskan port dengan baik. Ketika saya mensimulasikan kegagalan koneksi (lepaskan port Ethernet dari perangkat keras klien misalnya) maka kita memiliki masalah yang sama seperti yang saya jelaskan di atas.

Apa cara yang tepat untuk menangani situasi ini? Perlu diingat ini adalah terowongan yang terbalik sehingga apa pun yang terjadi perlu dilakukan pada server SSH. Idealnya saya memerlukan server ssh untuk segera menyadari bahwa sesi SSH yang menampung terowongan tidak aktif dan melepaskan port yang digunakannya. Saya kira solusinya bisa melibatkan membunuh proses SSH yang bersangkutan, tetapi saya harus berhati-hati dengan itu karena kami memiliki beberapa klien yang terhubung ke server ssh yang sama dan saya tidak ingin menendang mereka offline.

Menjadi sangat dewasa, saya yakin SSHD memiliki semacam fitur bawaan untuk menangani ini, tetapi saya tidak bisa mengetahuinya.

Mohon saran agar saya tidak harus kembali ke mengelola kotak Windows ...

FYI: Saya menjalankan ini pada distro berbasis Debian.

TCZ
sumber

Jawaban:

18

Anda harus menggunakan ClientAliveIntervaldi sshd_config.

ClientAliveInterval 15

Ref: man sshd_config

ClientAliveCountMax
         Sets the number of client alive messages (see below) which may be
         sent without sshd(8) receiving any messages back from the client.
         If this threshold is reached while client alive messages are
         being sent, sshd will disconnect the client, terminating the
         session.  It is important to note that the use of client alive
         messages is very different from TCPKeepAlive (below).  The client
         alive messages are sent through the encrypted channel and
         therefore will not be spoofable.  The TCP keepalive option
         enabled by TCPKeepAlive is spoofable.  The client alive mechanism
         is valuable when the client or server depend on knowing when a
         connection has become inactive.

         The default value is 3.  If ClientAliveInterval (see below) is
         set to 15, and ClientAliveCountMax is left at the default,
         unresponsive SSH clients will be disconnected after approximately
         45 seconds.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.
sejuk
sumber
Clement terima kasih. Saya akan melihat pengaturan di server kami.
TCZ
Dilakukan dan diuji, bekerja dengan indah. Terima kasih banyak.
TCZ