web-dev-qa-db-ja.com

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

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

これはUbuntuのgnome-terminalにありますが、端末の入出力を一時停止しているようで、GNOME端末ソフトウェア自体の動作には影響しません。そのため、gnome-terminalのバグは、sshとの厄介な矛盾よりも少なくなります。

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

230
Kzqai

sshd(サーバー)は、しばらくクライアントから何も聞こえない場合は接続を閉じます。たまにはサーバーにライフオブサイン信号を送信するようにクライアントに指示することができます。

この設定はファイル~/.ssh/configにあります。 4分ごとにremotehostにシグナルを送信するには、~/.ssh/configに次のコードを追加してください。

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

これが私の~/.ssh/configにあります。

すべてのホストに対して有効にするには、次のコマンドを使用します。

Host *
  ServerAliveInterval 240

また、chmod 600 ~/.ssh/configを必ず実行してください。これは、設定ファイルが他の人に読めないようにするためです。

255

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

Sshのmanページの "ESCAPE CHARACTERS"セクションで、根本的な詳細が説明されています。

243

これがあなたの質問に対する直接的な答えではないとしても、それはあなたが抱えている問題と大いに関係があります。接続を維持する(すべての接続が最終的に停止する)代わりに、セッションをバックグラウンドで維持する screentmuxなどのターミナルマルチプレクサを使用できます。端末が切断されても.

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

$ screen

それから、あなたは先に進み、通常どおりにシェルを使って作業を行います。接続が切断された場合、オンラインに戻ってSSH経由でサーバーに再接続できると、現在のセッションの一覧が表示されます。

$ screen -ls

セッションに再接続するには:

$ screen -r <session>

<session>はPIDまたはセッション名です。あなたはあなたのセッションに再接続され、あなたは中断したところから続行することができます!

セッションを切断して自宅から再接続して、中断した時点から再開することもできます。セッションを切断するには、C-aに続けてC-dを使用します(that Control + AそしてControl + D)。

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

リモートサーバーでscreentmuxを使用することはベストプラクティスと見なされ、強くお勧めします。何人かの人々はscreenを彼らのデフォルトログインシェルと同じくらいまで持っているので、彼らが接続するとき彼らはすぐに新しいscreenセッションを開始します。

38
fotos

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

11
Fergie

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

ファイル:/etc/ssh/ssh_config

コンテンツ:

ClientAliveInterval XX
ClientAliveCountMax YY

これはクライアントの設定とまったく同じように機能しますが、クライアントではなくサーバーからnullパケットが送信されます。

から抽出:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

5
Ladinfremes

クライアントがそもそもタイムアウトしないようにしたい人のために。

設定ファイルでConnectTimeout 0を設定しようとすることができます。値0は、接続が閉じられない限り無期限に存続することを意味します。

あなたのconfig(またはssh_config)ファイルはこのようになるでしょう:

Host *
   ConnectTimeout 0
1