web-dev-qa-db-ja.com

接続が失われ、sshがオンになっていると端末がハングする

gnomeターミナルタブでインターネット経由でサーバーにsshすると、インターネット接続が失われると、ターミナルタブがハングし、入力を受け付けなくなります。なぜハングするのですか?

ターミナルタブをアクティブにする方法はありますか?つまり、ローカルシェルプロセスの実行を継続させる方法はありますか?

端末タブを閉じるのが唯一の方法ですか?

20
Tim

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 を使用して、失われた接続を自動的に更新できます。これは非常に便利です。

[〜#〜]編集[〜#〜]

ただし、ClientAliveIntervalServerAliveIntervalの両方が明示的に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セッションがこれらの値に従って切断されていることを確認できます。

24