2010-01-20 23:33:01 +0000 2010-01-20 23:33:01 +0000
236
236

GNOMEターミナルのssh接続のタイムアウトとフリーズを回避する方法

特定のサーバにsshで接続するとタイムアウトして端末が「フリーズ」してしまう(入力を受け付けない、切断しない、Ctrl-Cでsshプロセスを強制終了させることもできないなど)。

これはUbuntuのgnome-terminalにありますが、ターミナルの入出力を一時停止しているようで、GNOMEターミナルソフトウェア自体の動作には影響しません。なので、ssh の迷惑な矛盾というよりは、gnome-terminal のバグというよりは、0x6& のバグではないでしょうか。

では、タイムアウトしてしまった ssh 接続から端末を保護/復帰させる方法はありますか?

回答 (7)

259
259
259
2010-01-20 23:53:48 +0000

sshd (サーバ) は、しばらくの間クライアントから何の音沙汰もない場合、接続を閉じます。クライアントに、たまにサーバにサインオブライフシグナルを送るように指示することができます。

このための設定はファイル~/.ssh/configにあります。リモートホストに4分ごとにシグナルを送信するには、~/.ssh/configに以下のように記述します。

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

これを~/.ssh/configに入れています。

Host *
  ServerAliveInterval 240

2x2& すべてのホストで有効にするには、以下のようにします。

0x1&

また、設定ファイルが世界で読めないようにしなければならないので、必ず chmod 600 ~/.ssh/config を実行してください。

250
250
250
2010-01-20 23:44:01 +0000

Enter、~、.を次々と押して、フリーズしたセッションから切断します。

ssh man ページの「ESCAPE CHARACTERS」のセクションでは、基本的な詳細について説明しています。

39
39
39
2012-07-03 01:28:14 +0000

これはあなたの質問に対する直接的な答えではありませんが、あなたが抱えている問題に大きく関連しています。接続を維持しようとする代わりに (すべての接続は最終的には死んでしまいます)、 screen tmux のようなターミナルマルチプレクサを使えば、たとえターミナルが切断されてもバックグラウンドでセッションを維持することができます。

本質的には SSH サーバにログインすると、すぐに screen を実行し、新しいセッションを作成してアタッチします:

$ screen

その後、通常のようにシェルを使って作業を行います。接続が切断された場合、オンラインに戻ってSSHでサーバに再接続すると、現在のセッションのリストが表示されます。

$ screen -ls

セッションに再アタッチするには:

$ screen -r <session>

ここで<session>はPIDまたはセッション名です。セッションに再接続され、前のセッションから続けることができます。

セッションを切り離して、自宅から再接続して元の場所から再開することもできます。セッションを切り離すには、C-aの後にC-dを使用します(Control + Aの後にControl + Dを使用します)。

簡単なオンラインチュートリアル もあります。

screentmux をリモートサーバで使用することは ベストプラクティス と考えられており、 強く推奨されています。中には、screen をデフォルトのログインシェルとして使用している人もいるので、接続するとすぐに新しい screen セッションが開始されます。

12
12
12
2014-02-06 14:13:27 +0000

接続文字列に -o ServerAliveInterval=30 を追加してみてください (30 は 30 秒を意味し、もちろん調整可能です)。

6
6
6
2016-02-12 22:45:27 +0000

また、SSHサーバ側からアイドルタイムアウトの間隔を設定することもできます:

File: /etc/ssh/ssh_config

Content.

ClientAliveInterval XX
ClientAliveCountMax YY

これはクライアント側の設定と全く同じように動作しますが、ヌルパケットはクライアント側ではなくサーバ側から送信されます。

内容: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html より抜粋

2
2
2
2015-12-17 02:19:43 +0000

そもそもクライアントがタイミングアウトしないようにしたい人向け。

設定ファイルでConnectTimeout 0を設定してみるといいでしょう。値 0 は、閉じない限り接続が無期限に維持されることを意味します。

設定ファイル (または ssh_config) は以下のようになっているかもしれません。

Host *
   ConnectTimeout 0
0
0
0
2020-01-24 11:55:41 +0000

私の場合はMTUのサイズが大きいのが問題でした。NATを使っている場合はルータ側でMTUを変更することもできますが、私はサーバ側でMTUを変更しています。

sudo /sbin/ifconfig eth0 mtu 1036
sudo /etc/init.d/networking restart

Windowsでは、このキーを増やすこともできます:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpMaxDataRetransmissions"=dword:00000010