gnomeターミナルタブでインターネット経由でサーバーにsshすると、インターネット接続が失われると、ターミナルタブがハングし、入力を受け付けなくなります。なぜハングするのですか?
ターミナルタブをアクティブにする方法はありますか?つまり、ローカルシェルプロセスの実行を継続させる方法はありますか?
端末タブを閉じるのが唯一の方法ですか?
SSH接続は、ClientAliveInterval
およびClientAliveCountMax
パラメータとそれらに対応するクライアント側のパラメータで設定された指定された時間が経過すると、自動的にダウンします。これらのタイムアウトが非常に高い場合は、シェルがフリーズすることがあります。ただし、OpenSSH
を使用する場合、タイムアウトを待つ必要はなく、 エスケープ文字 を使用して強制的に接続を閉じることができます。
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.
(...)
接続がフリーズしたらプレス ~ (つまり Shift+` キーを一緒に)、離して押します .。または、不安定な接続で作業している場合、または常にリモートサーバーに接続する必要がある場合、 autossh を使用して、失われた接続を自動的に更新できます。これは非常に便利です。
[〜#〜]編集[〜#〜]:
ただし、ClientAliveInterval
とServerAliveInterval
の両方が明示的に0に設定されているか、明示的に設定されておらず、sshd_config
およびssh_config
のマンページに従ってデフォルトで0に設定されている場合、タイムアウト設定は、次のファイルで設定されます( 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.
echo
を使用するだけでこれらの3つのファイルを変更し、凍結されたSSHセッションがこれらの値に従って切断されていることを確認できます。