モバイルホットスポットを使用してインターネットをサーフィンすると、SSH接続は切断され続けます。

モバイルホットスポットを使用してインターネットをサーフィンすると、SSH接続は切断され続けます。

セルタワーを介してインターネットサービスを提供するプロバイダを使用すると、SSHセッションの接続が頻繁に切断されます。彼らは「停止」し、私が入力しているすべてのものに応答しないように見えますが、時には停止して数分後に実際の切断メッセージが表示されます。

以下では「Q&Aスタイル」で自分の質問に答えています。これは過去1年間に解決しようとする時間を費やした問題であり、これまでに見つけたすべてのソリューションを統合して共有したいと考えていました。 。 (まだ見つからない他のソリューションがある場合は、あなたの答えも自由に追加してください!)

答え1

セルタワー/モバイルホットスポットを使用してインターネットにアクセスすると、SSHセッション(またはその他の永続接続)は3つの主な理由で中断される可能性があります。

  1. あなたのIPアドレスが変更されます。これは一般的にいいえ問題の原因。理論的には、これは固定IPアドレスを提供していないすべてのプロバイダ(モバイルなど)で発生する可能性がありますが、モバイルホットスポットプロバイダを使用してもIPは(通常)頻繁に変更されず、定期的に中断されません。接続。 「私のIPアドレスは何ですか?」を使用して、このようなことが発生しているかどうかを確認できます。サイトを入力して定期的にサイトを再ロードして、IPアドレスが変更されていることを確認してください。
  2. プロバイダとの接続が中断されました(例:弱い信号)。これが問題の場合、SSH接続だけでなく他の種類の接続(ストリーミングビデオ、Web検索)にも影響を与える可能性があります。
  3. あなたのプロバイダはNATを使用し、NATテーブルから「非アクティブ」接続を削除するのに非常に短い時間制限があります。他の用途(Webブラウジング、ビデオストリーミング)はインターネット接続が良好ですが、1〜2分以上入力を中止してもSSHセッションが応答しない場合、これが問題の原因である可能性があります。

問題#1と#2の解決策:

これらの問題に対する最善の解決策は、不安定で可変な接続に適したSSH以外のものを使用することです。 2つの一般的なオプションは次のとおりです。モシュそして永遠の終着地。 MOSHはスクロールをサポートしていないため(最新の出力画面のみが表示されます)、その機能を追加するにはscreenやtmuxなどを使用する必要があります。 Eternal Terminal はロールバックをサポートします。場合によっては、rootアクセスなしでサーバーの通常のユーザーアカウントとして永続端末(MOSH)をインストールすることがあります。

問題が一時的な接続が中断されている場合は、TCPKeepAliveを無効にし、「ClientAliveInterval 0」を設定してクライアントアクティビティチェックを無効にするか、「ClientAliveCountMax 20」を設定して許可することで、sshを使用し、サーバーのSSH設定が中断に耐えられるようにするかもしれません。接続を終了する前に確認に失敗しました。

最初の2つの段落のいくつかのソリューションを設定するには、サーバーへのルートアクセスが必要です。ルートアクセス権がない場合は、Webホスティング会社から安価なVirtual Private Server(VPS)を購入し、VPSに上記のオプションのいずれかを設定できます。その後、別のシステムに接続したい場合は、まずVPSに接続してから、それを使用してSSH経由で接続を中断することが少ない他のシステムに接続できます。

問題#3の解決策:

問題#3の解決策は、情報がSSH接続を介して定期的に送信され、インターネットプロバイダのNATテーブルから情報がタイムアウトしないようにすることです。

まず、正しい問題を解決しているかどうかをテストするのが役立ちます。次のスクリプトは、サーバーに1時間30秒ごとにSSH接続を介して出力を送信させます。このスクリプトの実行中にSSH接続が切断されずに1時間接続されている場合は、おそらく正しい方向に向かっています。 (そうでない場合は、間隔を30秒未満に設定するか、上記のSSH切断のその他の潜在的な原因を調べてください。)

INTERVAL=30
START_TIME=`date +%s`
END_TIME=$(( $START_TIME + 3600 ))
while [ `date +%s` -lt $END_TIME ]
do
    date
    sleep $INTERVAL
done
echo "Test completed successfully - your ssh connection lasted at least one hour."

上記のスクリプトがSSH接続を失うのを防ぐと仮定すると、解決策があるため、自動的に接続できるようにする方法しかありません。これを行う方法は、sshに30秒ごとに「アクティブ」チェックを実行させることです。これにより、30秒ごとにssh接続を介してメッセージが送信され、非アクティブなためにインターネットプロバイダのNATテーブルからそのメッセージが消去されるのを防ぎます。 「アクティブ」チェックを実行するようにコンピュータにサーバーまたはSSHクライアントを設定できます(どちらも問題ありません。どちらも必要ありません)。

サーバー側でこれを設定するには、/etc/ssh/sshd_configを編集して「ClientAliveInterval 30」を設定します。これにより、サーバーは30秒ごとにクライアントにメッセージを送信してクライアントの応答を確認します。サーバーがSSH接続を閉じる前に(マイナーな中断の場合)、最大10の失敗した検査を許可するように「ClientAliveMaxCount 10」を設定することもできます。構成変更を適用するには、sshdを再起動する必要があります。

サーバーへのルートアクセス権がない場合(または複数のサーバーに接続する必要がある場合)、コンピューターでこれを設定することもできます。コンピュータに30秒ごとにアクティビティチェックを送信させることができます。どの次のコマンドを使用して接続するサーバー:

Host *
    ServerAliveInterval 30
    ServerAliveCountMax 8

Linux または MacOS では、この行は ~/.ssh/config にあります。 WindowsでOpenSSHを使用している場合、この行はC:¥Users¥yourusername¥.ssh¥configにあります(ファイルがない場合は作成できます。.txtがないことを確認してください)。拡大)。

PuTTYを使用している場合は、[接続]セクションの下のセッション設定で[接続の維持間隔(秒)]を30に設定すると、同様の動作が発生します。 PuTTYでは、これを各サーバー/接続の設定に入れる必要がありますが、グローバル設定はないようです。

関連情報