sshタイムアウトがネットワークの場所によって異なるのはなぜですか?


15

自宅からオフィスサーバー(Fedora 10を実行)の1つにsshでアクセスすると、かなり短い時間(5分程度)でセッションがタイムアウトします。私はTcpKeepAliveクライアント側で使用してみましたが、効果はありませんでした。

私が理解していないのは、会社のLANのオフィスにいる場合、タイムアウトせずに終日セッションを非アクティブのままにしておくことができるため、動作は私の場所に依存しているように見えることです。

これがなぜ起こっているのか、私がLAN上にいないときにタイムアウトを防ぐ方法はありますか?それが役立つ場合は、Mac OSXでターミナルクライアントを使用しています。

更新 - ServerAliveIntervalゼロ以外のセットを使用するというDave Dragerの提案はTcpKeepAlive=no私のために働いた。他のいくつかの答えについては、ClientAlive...設定はMac OSX SSHクライアントでは受け入れられません。

回答:


6

ここにこの問題に関する良い記事があります

彼らはお勧めします:

ssh -o TCPKeepAlive=yes

または:

ssh -o TCPKeepAlive=no -o ServerAliveInterval=15

しかし、私の職場ではセッションから切断される問題があり、自宅では問題ありません。私のファイアウォール(SonicWall)は、おそらくNATのせいでTCPKeepAliveでうまく機能していると思います。

私のSSHクライアントであるSecureCRTには、幸いなことに「NO-OP」プロトコルのオプションがあります。これは、基本的にサーバーに何もしないコマンドを送信すると考えています。これを手動で有効にすることで、接続を維持できます。MacOSXターミナルクライアントがそれと似ているかどうかはわかりません。コマンドラインで「NO-OP」を実装する方法についての記事があります。

最後に、Wiresharkまたは他のスニファーを使用して実際のTCP接続を監視し、何が起こっているのかを調べることをお勧めします。これが、ときどき切断される理由を確認する最後の方法です。


おかげで、デイブ-ServerAliveIntervalオプションは素晴らしく機能しました。
gareth_bowles 09年

@Dave一部のサーバー管理者は、(a)セキュリティリスク、または(b)不当なサーバー負荷のいずれかである可能性があるため、この慣行に眉をひそめると聞きました。これらの懸念のいずれかが有効ですか、IYHO?
ジョナサンデー

これはクライアントエンドポイントの設定であるため、悪意のある環境にいる場合、誰かになりすますことができる可能性がありますが、接続のセキュリティに影響を与えることはほとんどありません。また、これが余分な負荷を引き起こすことも実際にはありません。
デイブDrager

@Dave:このコマンドを入力しましたが、次の使用方法を取得します:ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:] port] [-e escape_char] [-F configfile] [- I pkcs11] [-i identity_file] [-L [bind_address:] port:host:hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-R [ bindするアドレス:]ポート:ホスト:ホスト側] [-S ctl_path] [-Wホスト:ポート] [-w local_tun [:remote_tun]]、[ユーザー@]ホスト名[コマンド]
user1050619

この修正はPuTTYでも機能しました。設定しなければならない唯一のオプションは、接続->キープアライブ間の秒数:15です。SSHセッションは8時間以上(Comcast)生き続けていますが、通常は<30分で切断されます。
ダンダスカレスク

2

これはおそらく、自宅から接続しているときにファイアウォールを通過し、しばらくするとTCPセッションを閉じるためです。ただし、TcpKeepAliveはこれを回避する必要があります。クライアント側またはサーバー側でTcpKeepAliveを有効にしましたか?


クライアント側でTcpKeepAliveを実行しました(〜/ .ssh / configで)-これによりローカルファイアウォールの問題に対処できると思いましたが、それでもタイムアウトになります。
gareth_bowles 09年

デフォルトでは、サーバー側で「オン」になっていますが、sshd_configをチェックして、無効になっていないかどうかを確認してください。
半径

ファイアウォールの中には、アイドル状態でない場合でも、一定時間後にTCP接続を切断するものがあります。
TomOnTime

ファイアウォールの中には、アイドル状態でない場合でも、一定時間後にTCP接続を切断するものがあります。これを検出する方法は、一貫して切断されるかどうかを確認することです。
TomOnTime

ここで私は修正するために使用される設定は以下のとおりです。TCPKEEPALIVEなし、ClientAliveInterval 300、ClientAliveCountMax 3
マット・シモンズ

2

これは、Comcast接続で常に取得しています。問題は、SSHクライアントのキープアライブ間隔が、ネットワークパスで設定されたタイムアウトに対して長すぎることです。あなたは、Linuxを使っている場合は、変更することができますServerAliveIntervalし、ServerAliveCounterそのデフォルト値よりも低い値を。この値は秒単位で設定されます。システム全体の設定ファイルは(一般に)にあり/etc/ssh/ssh_configます。これら2つのAND TcpKeepAliveを設定すると、接続を維持できます。


1

radiusが言うように、一部のステートフルファイアウォールは、一定の(通常は構成可能な)時間後に接続を「忘れ」、接続の通信を許可しません。TCP SYNで接続が開始されることを期待しています(ここでSSH通信を参照します)。

別の可能性があります。自宅とオフィスの間のネットワークパスには、(パケットの種類の)損失がある場合があります。SSHクライアントで入力しようとしたときに、リンクがしばらく停止していると、クライアントがgiveめて失敗する可能性があります。

クライアントのキープアライブ構成は、ここで最初のケースを処理しますが、2番目のケースでは役に立ちません。ファイアウォールは通常、オフィスの境界にあるため、構成可能です。それも最初のポイントに役立ちます。

断続的なリンク損失があるかどうかを確認するには、クライアントマシンからバックグラウンドで「ping」をアクティブにしておくことができます。


0

また、他の人によって提案された設定を~/.ssh/configファイルのデフォルトとして追加することもできます。そのためssh、接続を開始するたびにそれらを渡す必要はありません。

nano ~/.ssh/config 追加します:

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