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.
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.