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

gnome-terminal ssh terminal timeout

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

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

そこで、タイムアウトしてしまったssh接続から端末を防ぐ/取り戻す方法はありますか?

  244  Kzqai  2010-01-20


ベストアンサー

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

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

Host remotehost
HostName remotehost.com
ServerAliveInterval 240

これが私の~/.ssh/configにあるものです

すべてのホストで使用するために有効にするには

Host *
ServerAliveInterval 240

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

265  Ludwig Weinzierl  2010-01-20


Enter, ~, .を順に押すと、フリーズしたセッションから切断することができます

ssh man ページの「ESCAPE CHARACTERS」の項では、その根底にある詳細を説明しています

258  Peter Eisentraut  2010-01-20


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

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

$ screen

その後は、通常のようにシェルを使って作業を行います。接続が切断されても、オンラインに戻ってSSHでサーバに再接続すれば、現在のセッションの一覧が表示されます

$ screen -ls

セッションに再アタッチすること

$ screen -r <session>

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

セッションを切り離して、ホームから再接続して、中断した場所から再開することもできます。セッションを切り離すには、C-aの後にC-dを使います(Control + Aの後にControl + Dが続きます)

シンプルなオンラインチュートリアルもあります

リモートサーバでscreentmuxを使うことはベストプラクティスと考えられており、強く推奨されています。デフォルトのログインシェルとして screen を使う人もいます

40  fotos  2012-07-03


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

13  Fergie  2014-02-06


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

File: /etc/ssh/ssh_config

Content:

ClientAliveInterval XX
ClientAliveCountMax YY

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

Extracted from:

Linux y VMWare: SSH evitar desconexión inactividad
Linux: SSH evitar desconexión inactividad

6  Ladinfremes  2016-02-12


そもそもクライアントのタイミングアウトを防ぎたい方へ

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

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

Host *
ConnectTimeout 0

2  Yohannes Libanos  2015-12-17


私の場合は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

0  Vasin Yuriy  2020-01-24


これがgnomeターミナルでも動作するかどうかはわかりませんが、sshクライアントプロセスを終了させれば、再びターミナルを使えるようになるはずです

pgrep -a ssh

プロセスIDが表示されるので、それを使って強制終了させることができます

kill <pID>

0  MoRe  2020-08-04


タイトルとURLをコピーしました