Як звільнити порти на сервері SSH, коли зворотний ssh-тунель відключився різко / нечисто?


19

У нас є деяке обладнання, яке ми встановлюємо в місцях розташування наших клієнтів. Це обладнання підключається до нашого ssh-сервера і встановлює зворотний ssh-тунель, щоб ми могли отримати доступ до декількох клієнтських систем для моніторингу.

Все працює добре, поки не з’явиться нечистий відключення сеансу SSH.

Коли це станеться, на нашому сервері SSH порти, які використовувались зворотним тунелем, залишаються застряглими в режимі LISTENING, і коли наше віддалене обладнання в кінцевому підсумку намагається автоматично підключитися та відновити свої тунелі, воно не вдається з помилкою.

Попередження: віддалене переадресація портів не вдалося прослухати порт XXXX

Я перевірив, чи не було проблеми з нашим сервером SSH або клієнтом, спробувавши чисте відключення і звичайно, що звільняє порти просто чудово. Коли я імітую поломку підключення (наприклад, від'єднайте порт Ethernet від клієнтського обладнання), у нас є та сама проблема, яку я описав вище.

Який правильний спосіб вирішення цієї ситуації? Майте на увазі, що це тунелі, що перевернулися, тому що б там не було потрібно зробити на сервері SSH. В ідеалі мені потрібен сервер ssh, щоб миттєво усвідомити, що сеанс SSH, що розміщує тунелі, не працює і звільнити порти, які він використовував. Я думаю, що рішення може включати вбивство відповідного SSH-процесу, але мені потрібно бути обережним, тому у нас є кілька клієнтів, що підключаються до одного і того ж ssh-сервера, і я не хотів би їх вимкнути в автономному режимі.

Будучи такою зрілою, я впевнений, що в SSHD є якась вбудована функція для вирішення цього питання, але я просто не можу це зрозуміти.

Будь ласка, порадьте, тому я не повинен повертатися до адміністрування вікон Windows ...

FYI: Я запускаю це на дистрибутиві на основі Debian.

Відповіді:


18

Ви повинні використовувати ClientAliveIntervalу своєму sshd_config.

ClientAliveInterval 15

Посилання: 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.

Дякую, Клименті. Я розглядаю налаштування цього на нашому сервері.
TCZ

Зроблено і перевірено, працює прекрасно. Велике спасибі.
TCZ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.