web-dev-qa-db-ja.com

SSH接続タイムアウトの問題を診断する方法は?

私は自分のWindowsマシンからPuTTYを使用して接続する、Debian 7を実行しているVPSを持っています。ほとんどの場合、PuTTYは正常に接続し、ログインできます。ただし、時々、PuTTYはConnection Timeout

前回これが発生したとき、SSHを実行しているポートにtelnetで接続しようとしましたが、接続できませんでした。次に、サービスを実行していることがわかっているVPSの別のポートにtelnetで接続しようとすると、正常に接続されました。

「再生」が開始されたときに、5〜10回接続を試行すると、正常に接続できます。 Syslogを確認したところ、この問題に役立つ可能性のある興味深いものは見つかりませんでした。それが価値がある場合、「再生」中にサーバーに接続すると、遅いように見えます(コマンドを入力すると、SSHウィンドウに表示されるまでに1〜2秒かかります)。

これはほとんどの場合機能するため、ファイアウォールの問題であるとは思われません。たぶん私のホストはメンテナンスをしていますか?

編集:TCPKeepAliveが有効になっています。たった今再び再生され、SSHポートにtelnetで接続しようとしたときに、実際に接続できました。変。

4
Matt Anderson

診断するには、まずPuTTY.exeの詳細モードを使用する必要があります。

Cmdを開いて使用:

PuTTY.exe -v -ssh user@]Host

-vを使用すると、さらに多くの情報が表示されます。

接続が密にならないようにするには、設定を確認します。

PuTTY(Win)の場合:セッションプロパティ>接続に移動し、[nullパケットの送信]でセッションをアクティブに保ち、キープアライブの間隔を秒に設定します(0にするとオフなど) 300(5分)。

Linux(ssh)の場合:キープアライブをシステム全体で有効にするには:

  • すべてのユーザー用:/ etc/ssh/ssh_configを編集します。
  • あなたのためだけ:代わりに〜/ .ssh/configを編集してください。

以下を挿入します。

Host *
    ServerAliveInterval 300
    ServerAliveCountMax 2

/ etc/ssh/sshd_configに以下を追加することで、OpenSSHサーバーがクライアントとのすべての接続を維持できるようにすることもできます。

KeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 2

これらの設定により、SSHクライアントまたはサーバーは300秒(5分)ごとにヌルパケットを反対側に送信し、2回試行しても応答を受信しない場合は接続を中止します。とにかく破棄されました。

Ssh_configのmanページから:

ServerAliveCountMax ssh(1)がサーバーからメッセージを受信せずに送信できるサーバー生存メッセージ(下記参照)の数を設定します。サーバーアライブメッセージの送信中にこのしきい値に達すると、sshはサーバーから切断し、セッションを終了します。サーバーアライブメッセージの使用は、TCPKeepAlive(下記)とは大きく異なることに注意することが重要です。サーバーアライブメッセージは暗号化されたチャネルを介して送信されるため、なりすましはできません。 TCPKeepAliveによって有効にされるTCPキープアライブオプションはスプーフィング可能です。サーバーアライブメカニズムは、クライアントまたはサーバーが接続が非アクティブになったときの認識に依存している場合に役立ちます。

デフォルト値は3です。たとえば、ServerAliveInterval(下記参照)が15に設定され、ServerAliveCountMaxがデフォルトのままである場合、サーバーが応答しなくなると、sshは約45秒後に切断します。このオプションはプロトコルバージョン2にのみ適用されます。プロトコルバージョン1では、サーバーからサーバー生存メッセージへの応答を要求するメカニズムがないため、切断はTCPスタックの責任です。

ServerAliveIntervalサーバーからデータが受信されなかった場合、ssh(1)がサーバーからの応答を要求するメッセージを暗号化チャネル経由で送信するまでのタイムアウト間隔を秒単位で設定します。デフォルトは0で、これらのメッセージがサーバーに送信されないことを示します。BatchModeオプションが設定されている場合は300です。このオプションは、プロトコルバージョン2にのみ適用されます。 ProtocolKeepAlivesおよびSetupTimeOutは、このオプションのDebian固有の互換性エイリアスです。

3

なぜこれが起こるのか正確にはわかりません(ご覧のとおり、一般的なコンセンサスは、これに影響を与える可能性のある送信元、宛先、およびネットワークコンポーネントに多くの要素があるということです)。

ただし、実際のsshを実行する前にscpを使用して小さなダミーファイルをコピーすると、いくつかのLinuxおよびAIX環境でこの問題がほぼ解消されるようです。

    echo Copying small dummy file to $DESTINATION_IP
    scp -o StrictHostKeyChecking=no -o PasswordAuthentication=no dummy.tmp testuser@$DESTINATION_IP:/tmp/. 
    echo Testing ssh again
    ssh -n -tt -o StrictHostKeyChecking=no -o PasswordAuthentication=no testuser@DESTINATION_IP

ちょうど私の2c

0
Raja

より広範なネットワークの問題を排除しようとしたようですが、おそらくそれは正しく行われました。

(私は常に、pingtracerouteを見て、ネットワーク遅延測定を測定することを考えていました。なぜなら、pingだけに長い時間をかける必要はなく、ローカルのインターネット接続に問題があるかどうかを確認する必要があります。)

VPSを使用している場合、注意しなければならない一般的な問題が2つあると思います。

  1. 小さすぎるVPSで実行しすぎた場合。メモリを使いすぎて、ディスクとの間でデータやコードを絶えず交換している可能性があります。今、あなたのディスクは非常にビジーで、すべてが遅いです。長い時間がかかります。 SSHをロードします。

    診断:メモリ使用量を監視します。

    atop は、メモリ使用量やその他のパフォーマンス情報の非常に粗いログを作成する便利な方法です。 atopの実行には約5/10MのRAMが必要です(32ビット対64ビット)。これはXenまたはKVMベースのVPSで機能します。 OpenVZ(または他のコンテナーベースのVPS)でどの程度うまく機能するかわかりません。

  2. 「騒々しい隣人」問題。他の誰かが前の問題を実行していることが原因の場合もあります:)。仮想システムでは、ハードウェアを他の多くのユーザーと共有しています。一部の人々が「予想される」よりも多くのディスクIO(またはおそらくより多くのメモリ)を使用している場合、同じハードウェア上の他のVPSが影響を受けます。

    監視はこれを診断するのにも役立ちます。しかし、それはおそらくやや難しく、専門的な問題です。

サービスの実際の応答時間に近づくものを測定および監視(ログ/グラフ)できることに重点を置くのが最善の場合があります。 VPSが主にパブリックWebサーバーである場合、これは一般的な要望であり、これを提供する無料の試用版/制限付きサービスがあります。

優れたホストが両方のタイプの監視のための基本的なアドバイスやツールを提供すると結論付けることができますが、それが実際にどれほど一般的であるかはわかりません。

これらのタイプの問題は、VPSプロバイダーに認識されます。診断手法の1つは、それらに連絡して、発生している問題を説明することです:-)。

0
sourcejedi