web-dev-qa-db-fra.com

Comment libérer des ports sur le serveur SSH lorsqu'un tunnel SSH inversé débranchit brusquement / sans risque?

Nous avons un quincaillerie que nous installons dans les emplacements de nos clients, ce matériel se connecte à notre serveur SSH et établit un tunnel SSH inversé afin que nous puissions accéder à plusieurs systèmes clients à des fins de surveillance.

Tout fonctionne bien jusqu'à ce qu'il y ait une déconnexion impure de la session SSH.

Lorsque cela se produit, sur notre serveur SSH, les ports utilisés par la suspension de tunnel inversé bloqué dans le mode d'écoute et lorsque notre matériel distant essaie de renouer automatiquement et de rétablir ses tunnels, il échoue avec l'erreur.

AVERTISSEMENT: Échec du transfert de port distant pour l'écoute Port XXXX

J'ai testé s'il y avait un problème avec notre serveur SSH ou notre client en essayant une déconnexion propre et un cours qui libère simplement les ports. Lorsque je simule une panne de connexion (débranchez le port Ethernet du matériel client par exemple), nous avons le même problème que j'ai décrit ci-dessus.

Quelle est la bonne façon de gérer cette situation? N'oubliez pas que ce sont des tunnels inversés, alors tout ce qui se passe doit être fait sur le serveur SSH. Idéalement, j'ai besoin que le serveur SSH se rendit compte instantanément que l'hébergement de la session SSH d'héberger les tunnels est en panne et libère les ports qu'elle utilisait. Je suppose que la solution pourrait impliquer de tuer le processus de SSH concerné, mais je dois faire attention à cette cause que nous avons plusieurs clients qui se connectent au même serveur SSH et que je ne voudrais pas les frapper hors ligne.

Être si mature, je suis sûr que Sshd a une sorte de fonctionnalité intégrée pour gérer cela, mais je ne peux tout simplement pas le comprendre.

S'il vous plaît conseiller de sorte que je n'ai pas à retourner pour administrer des boîtes de fenêtres ...

FYI: Je cours sur une distribution basée sur Debian.

21
TCZ

Vous devez utiliser ClientAliveInterval dans votre sshd_config.

ClientAliveInterval 15

Ref: homme 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.
19
clement