Połączenie SSH spada automatycznie po upływie określonego okresu czasu przez zestaw ClientAliveInterval
i ClientAliveCountMax
parametrów oraz ich odpowiedniki po stronie klienta. Jeśli limity czasu są dość wysokie, pojawi się zamrożona skorupa. Jeśli jednak skorzystasz OpenSSH
, nie musisz czekać na przekroczenie limitu czasu i możesz wymusić zamknięcie połączenia za pomocą znaków zmiany znaczenia :
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.
(...)
Gdy połączenie się zawiesi, naciśnij ~(to znaczy Shift+ `klawisze razem), zwolnij i naciśnij .. Alternatywnie, jeśli pracujesz z niestabilnym połączeniem lub musisz być podłączony do zdalnego serwera przez cały czas, możesz użyć autossh do automatycznego odnowienia utraconego połączenia, jest to bardzo wygodne.
EDYCJA :
Jednakże, jeśli obie ClientAliveInterval
i ServerAliveInterval
są ustawione na 0 w sposób wyraźny lub nie są jawnie, a następnie są ustawione na 0 domyślnie według sshd_config
i ssh_config
strony podręcznika, ustawienia czasu oczekiwania są ustawione w następujących plikach (od 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.
Możesz zmodyfikować te 3 pliki za pomocą echo
i przekonać się, że zamrożona sesja SSH jest rozłączana zgodnie z tymi wartościami.
Enter
~
.
sekwencji kończącej połączenie./proc/sys/net/ipv4/tcp_keepalive*
plikiClientAliveInterval
iServerAliveInterval
współpracują ze sobą? Czy wszystkie mają takie same ustawienia, tj. Utrzymują połączenie ssh przy życiu? Czy poprzednie pliki są nie tylko dla połączeń ssh, ale także dla innych połączeń TCP?/proc/sys/net/ipv4/tcp_keepalive*
są nie tylko,ssh(d)
ale jak to napisano w dokumencie, do którego linkowałem: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
na pilocie lub odłącz kabel i sprawdź, kiedy zamrożonassh
sesja zakończy się sama.frozen shell
Rozumiem przez to, że powłoka jest nieaktywna, nie bierze żadnych kluczy i niczego nie drukuje.