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


235

sshを介して特定のサーバーに接続すると、タイムアウトし、ターミナルを「フリーズ」します(入力を受け入れず、切断せず、Ctrl-Cでsshプロセスなどを強制終了できません)。

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

だから、タイムアウトした端末をssh接続から防ぐ/回復する方法はありますか?


回答:


256

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

この設定はファイルにあります~/.ssh/config。リモートホストに4分ごとに信号を送信するには、以下をに入れます~/.ssh/config

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

これは私が私に持っているもの~/.ssh/configです。

すべてのホストで有効にするには、次を使用します。

Host *
  ServerAliveInterval 240

またchmod 600 ~/.ssh/config、設定ファイルは誰でも読み取り可能ではないため、必ず実行してください。


1
言葉遣いを手伝ってくれたsblairに感謝します。sshがファイルの権限をチェックし、ファイルがワールドまたはグループで読み取り可能な場合は失敗するため、「してはいけない」から「してはならない」に変更しました。
ルートヴィヒワインツィール

1
これはOPが求めたものではありません。彼は非アクティブのためにキックオフされていません。彼は接続を試みており、端末はフリーズしています。
セリン14

これはどこ~/.ssh/config
ユーザー14

1
@User '〜/'はホームフォルダーを表します。「.ssh」は、ホームフォルダー内のフォルダーです。
wkm

6
接続が実際に失われている場合、これは
役に立ちません...-so12311

248

押してEnter~.凍結されたセッションから切断するために次々と。

sshのマニュアルページの「エスケープ文字」セクションで、基礎となる詳細について説明しています。


40
この答えは、質問に対してより正確に答えるように見えますが、いずれにしても、私が探していた答えでした。
CoatedMoose

あなたが行のコメントを解除する必要があることに注意EscapeChar ~して/etc/ssh/ssh_config(または~/.ssh/ssh_configあなたが好む場合)。
アディティアMP

@adityamenonいいえ、EscapeChar ~すでに組み込みのデフォルトです。
ピーターアイゼントラウト

2
@Markは質問に「タイムアウトした ssh接続から端末を取り戻すことを防ぐ方法はありますか?」と尋ねます。強調鉱山。
CoatedMoose

2
質問の文脈では間違っていましたが、これはまさに私が望んでいたものです。
SUBINセバスチャン

38

これもあなたの質問に対する直接的な答えではなく、あなたが抱えている問題に深く関係しています。代わりアライブ接続を維持しようとする(すべての接続は最終的に死ぬ)あなたは次のように、ターミナルマルチプレクサを使用することができますscreenし、tmuxお使いの端末が切断された場合でも、それはバックグラウンドでセッションを存続。

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

$ screen

次に、通常どおりシェルを使用して作業を進めます。接続が切断された場合、オンラインに戻ってSSH経由でサーバーに再接続すると、現在のセッションのリストが表示されます:

$ screen -ls

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

$ screen -r <session>

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

セッションを切断し、自宅から再接続して、中断した正確なポイントから再開することもできます。使用するセッションをデタッチするにC-aは、C-d(thats Control + Aand then Control + D)を続けます。

ある簡単なオンラインチュートリアルでは、同様に。

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


2
別の方法はmosh
ゾンビ

これは、時々ドロップアウトするホットスポットまたはwifiを使用している場合に特に便利です。
ランドール

11

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


5

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

ファイル: /etc/ssh/ssh_config

コンテンツ:

ClientAliveInterval XX
ClientAliveCountMax YY

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

から抽出:

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


1

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

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

構成(またはssh_config)ファイルは次のようになります。

Host *
   ConnectTimeout 0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.