Die SSH-Verbindung wird nach einem bestimmten Zeitraum, der von ClientAliveInterval
und ClientAliveCountMax
Parametern und deren clientseitigen Entsprechungen festgelegt wurde, automatisch getrennt . Wenn diese Zeitüberschreitungen ziemlich hoch sind, tritt eine gefrorene Shell auf. Wenn Sie jedoch verwenden, müssen OpenSSH
Sie nicht auf eine Zeitüberschreitung warten und können mithilfe von Escape-Zeichen das Schließen einer Verbindung erzwingen :
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.
(...)
Wenn die Verbindung nicht mehr reagiert, drücken Sie ~(dh Shift+ `Tasten gleichzeitig), lassen Sie sie los und drücken Sie .. Wenn Sie mit einer instabilen Verbindung arbeiten oder die ganze Zeit über eine Verbindung zum Remote-Server benötigen, können Sie autossh verwenden , um die verlorene Verbindung automatisch zu erneuern. Dies ist sehr praktisch.
EDIT :
Wenn jedoch beide ClientAliveInterval
und ServerAliveInterval
explizit auf 0 festgelegt sind oder nicht explizit festgelegt sind und dann gemäß den Hilfeseiten sshd_config
und standardmäßig auf 0 festgelegt sind ssh_config
, werden die Timeout-Einstellungen in den folgenden Dateien festgelegt (von 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.
Sie können diese 3 Dateien ändern, indem Sie einfach Folgendes verwenden echo
und sich davon überzeugen, dass eine eingefrorene SSH-Sitzung gemäß diesen Werten getrennt wird.
Enter
~
.
die Sequenz zu gewöhnen , die die Verbindung beendet./proc/sys/net/ipv4/tcp_keepalive*
Dateien undClientAliveInterval
undServerAliveInterval
zusammenarbeiten? Sind sie alle für die gleichen Einstellungen, dh um die SSH-Verbindung am Leben zu erhalten? Sind die früheren Dateien nicht nur für SSH-Verbindungen, sondern auch für andere TCP-Verbindungen?/proc/sys/net/ipv4/tcp_keepalive*
sind nicht nur für,ssh(d)
sondern wie es in dem Dokument heißt, das ich verlinkt habe: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.
sshd
die Remote-Verbindung oder entfernen Sie ein Kabel, und überprüfen Sie, wann eine eingefrorenessh
Sitzung von selbst beendet wird. Mit "frozen shell
Shell" meine ich eine Shell, die inaktiv ist, keine Schlüssel entgegennimmt und nichts druckt.