SSHロック:リモート問題ではなくローカル問題と疑われる

SSHロック:リモート問題ではなくローカル問題と疑われる

私の仕事用コンピュータでは、関係のない2つのサーバーに定期的にSSHを使用しています。時にはSSHセッションがロックされます(キーボード入力に応答しません)。ロックされている場合は、2番目のオープンターミナルを介してSSHを使用できますが、機能しますが、固定ターミナルはアンロックされません。~.端末の接続が切断され、ローカル CLI が提供される前にキーを押すのに時間がかかります。私は定期的に自宅で両方のサーバーに何の問題もなくSSH経由で接続しているため、ローカルのビジネスコンピュータに問題があると思われます。

他の端末でもこの問題が発生しますか?はい、この問題はKonquerorとTerminatorの両方で発生します。

両方のリモートサーバーで同時に問題が発生しますか?いいえ

この問題は、サーバーで実行されている特定のアプリケーションで発生しますか? CLIまたはVIMでGNU画面の有無にかかわらず。

テストの目的で、私は4つのターミナルだけを開きました。 Konqueror端末2台(サーバーごとに1つずつ)とTerminator端末2台(サーバーごとに1つ)が開かれました。約1時間ほど過ぎると片方(ターミネーター)端末だけロックされた。同じサーバー上の他の端末はロックされず、他のサーバーの端末もロックされません。もちろん、間違ったCtrl-Sが送信されていることを確認するために、ロックされた端末でCtrl-Qを試してみましたが、問題は解決しませんでした。画面がロックされた端末(SSHを実行している基本セッションまたはSSHセッション自体)で実行されていません。

修正する:1時間後、Terminatorのロックされたサーバーはついに「書き込みに失敗しました:壊れたパイプ」メッセージで切断され、ローカルCLIは正常に機能し、Konsoleの両方のサーバーもロックされました。

答え1

SSHは通常アイドル状態では何も送信しないため、チェーン内の問題によりアイドル接続がタイムアウトします。ただし、無料の場合は定期的にメッセージを送信することができます。 OpenSSH 3.8以降:

$ ssh -oServerAliveInterval=60 myremotebox

このホストに頻繁に手動でアクセスする場合は、以下をsshファイルに入れることができます~/.ssh/config

Host myremotebox
    ServerAliveInterval=60

これは、他のデータを送信せずに60秒ごとに空のパケットを送信するように指示します。私はさまざまなインフラストラクチャでこれが接続をアクティブに保つのに十分であることを発見しました。

OpenSSH 3.8より前のバージョンにはこのオプションはありませんでしたが、代替機能はより弱かったです。KeepAlive以下を使用するこのオプションを設定できます。TCP接続の維持。動作方法はオペレーティングシステムによって異なり、動作を頻繁に変更するとすべてのアプリケーションに影響します。悪いことに、ネットワークスタックは通常2時間ごとにTCPキープアライブを送信します。持つこの方法を使用するには、SSH接続がタイムアウトする理由がアイドルしきい値が2時間よりはるかに低いため、デフォルトを変更してください。

3.8+文書を読む場合でも、これはTCPKeepAlive同じオプションです。 3.8に「サーバーがアクティブです」オプションを追加したとき、それらを区別するためにKeepAlive名前を変更しました。TCPKeepAlive

関連情報