ウェブサイト検索

SSH セッションを維持する方法


手間のかからない SSH セッションを体験してください。ガイドに従って接続を維持し、フリーズの問題を解消してください。

リモートサーバー管理と安全なデータ転送には、SSH (Secure Shell) が不可欠なツールとして機能します。ただし、その利便性とセキュリティは、SSH セッションの凍結という共通の不満によって損なわれることがあります。

さらに、セッションが突然中断されると、仕事が失われ、プロジェクトが遅れ、無力感に陥る可能性があります。

しかし、心配する必要はありません。解決策はすぐにあります。この包括的なガイドでは、アクティブで応答性の高い SSH 接続を維持し、フリーズの問題のないシームレスなエクスペリエンスを確保するための秘密を明らかにします。

したがって、フラストレーションに別れを告げ、効率的で中断のない SSH セッションを楽しみましょう。しかし、先に進む前に、重要な質問に答えてみましょう。

SSH が接続を閉じるのはなぜですか?

簡単に言うと、すべては TCP タイムアウトに起因するということです。 TCP タイムアウトとは、TCP 接続またはネットワーク操作が、プロセスが失敗したとみなされるまでの応答の待機時間を指します。

Linux では、TCP タイムアウト設定により、パケットが失われたか接続が応答しなくなったとみなすまでに、TCP 接続または操作が待機する時間を決定します。

このメカニズムは、ネットワーク通信の信頼性と効率を確保するために非常に重要です。

SSH 接続を維持する場合、以下で簡単に説明する 3 つの主要なシステム パラメータがあります。

  • tcp_keepalive_time: アイドル状態の TCP 接続で TCP キープアライブ プローブを送信する間隔を決定します。キープアライブ プローブは、データが転送されていない場合でも、リモート ピアがまだ生きていて応答しているかどうかをチェックします。
  • tcp_keepalive_probes: アイドル状態の接続におけるリモート エンドポイントの正常性と応答性をチェックするために TCP エンドポイントによって送信される小さなパケット。リモート エンドポイントが到達不能になったか、ネットワークの問題により接続が失われたかを検出します。
  • tcp_keepalive_intvl: アイドル状態の TCP 接続でキープアライブ プローブを送信する間隔を制御します。

各値は秒単位であり、以下のコマンドで簡単に確認できます。

cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_probes
cat /proc/sys/net/ipv4/tcp_keepalive_intvl

それはどういう意味ですか?キープアライブ時間は 7200 秒、つまり 120 分 (2 時間) です。ただし、次の 2 つのパラメータが重要であるため、これは SSH セッションが 2 時間存続することを意味するものではありません。

システムのデフォルト設定では、75 秒間隔で 9 つのプローブが送信され、合計 675 秒かかります。その後、セッションは失敗して閉じられたとみなされます。

つまり、11 分強後、非アクティブ状態、つまり端末に何かを入力しなかった場合、SSH セッションは終了します。

もちろん、これらの設定を調整することはできますが、これは正しい方法ではありません。 SSH は、セッションを維持するためのメカニズムを提供します。これについては、以下で説明します。

SSH セッションを維持する方法

SSH セッションを維持するには、クライアント側とサーバー側の両方での構成が必要なプロセスです。

クライアント側の構成 (Linux)

クライアント側、つまり Linux デスクトップ システムで、ホーム ディレクトリにファイル「~/.ssh/config」を作成します (まだ存在しない場合)。

touch ~/.ssh/config

ただし、「~/.ssh」ディレクトリが存在しない場合は、ディレクトリを作成し、適切な権限を設定する必要があります。

mkdir ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/config
Host *
ServerAliveInterval 120
ServerAliveCountMax 30

各オプションの意味は次のとおりです。

  • ホスト: 指定された構成は、「ホスト」キーワードの後にリストされているホストにのみ適用されます。ワイルドカード文字 (*) を使用したため、これらはすべてのホストに適用されます。
  • ServerAliveInterval: タイムアウト間隔を秒単位で設定します。その後、サーバーからデータが受信されない場合、SSH は暗号化されたチャネルを通じてメッセージを送信し、サーバーからの応答を要求します。デフォルトは 0 で、これらのメッセージがサーバーに送信されないことを示します。
  • ServerAliveCountMax: SSH がサーバーからメッセージを受信せずに送信できるサーバー アライブ メッセージの数を設定します。サーバーアライブ メッセージの送信中にこのしきい値に達すると、SSH はサーバーから切断され、セッションが終了します。デフォルト値は 3 です。

つまり、クライアントはサーバーにキープアライブ メッセージを 120 秒 (2 分) ごとに 30 回送信します。 120 * 30=3600 秒、つまり 1 時間。これは、アクティビティがない場合でも SSH セッションが維持される合計時間です。

クライアント側の構成 (Windows)

SSH セッションを維持するには、SSH 経由のリモート アクセスに PuTTY を使用する Windows ユーザーは、「接続」タブの「キープアライブ間の秒数」オプションを 2 より大きい値に設定する必要があります。ゼロ。

以下に示す例では、この値を 60 に設定しています。これは、PuTTY クライアントが毎分キープアライブ メッセージをサーバーに送信して、SSH 接続を維持することを意味します。

もちろん、PuTTY セッションの変更を保存することを忘れないでください (「カテゴリ」 > 「保存されたセッション」 > 「保存」) 。

サーバー側の構成

サーバーのタイムアウト オプションを変更すると、サーバーに接続するすべてのクライアントに影響します。これを行うには、「/etc/ssh/sshd_config 」ファイルを編集する必要があります。

sudo nano /etc/ssh/sshd_config

次に、次の 3 つのオプションを設定します。

TCPKeepAlive yes
ClientAliveInterval 120 
ClientAliveCountMax 30

これら 3 つのオプションのそれぞれの意味は次のとおりです。

  • TCPKeepAlive: システムが TCP キープアライブ メッセージをクライアントに送信するかどうかを指定します。
  • ClientAliveInterval: タイムアウト間隔を秒単位で設定します。その後、クライアントからデータを受信しない場合、SSH サーバーは暗号化されたチャネルを通じてメッセージを送信し、クライアントからの応答を要求します。デフォルトは 0 で、これらのメッセージがクライアントに送信されないことを示します。
  • ClientAliveCountMax: SSH サーバーがクライアントからメッセージを受信せずに送信できるクライアント アライブ メッセージの数を設定します。クライアントアライブメッセージの送信中にこのしきい値に達すると、SSH サーバーはクライアントを切断し、セッションを終了します。デフォルト値は 3 です。

上記のクライアント側構成の場合と同様、SSH サーバーは接続を 1 時間 (120 * 30=3600 秒) 維持します。

最後に、SSH サーバーを再起動します。

sudo systemctl restart ssh

結論

SSH タイムアウトとキープアライブを実装すると、セキュリティの強化と信頼性の高い接続の確保との間で微妙なバランスが生まれます。

SSH タイムアウトとキープアライブの利点は、アイドル状態のセッションを自動的に終了することでネットワーク セキュリティに貢献し、不正アクセスや潜在的な攻撃のリスクを軽減できることから明らかです。

一方で、タイムアウトとキープアライブを過度に適用すると、欠点が生じます。過度に積極的な設定は、意図しない切断を引き起こし、生産性を妨げ、ユーザーのフラストレーションを引き起こす可能性があります。

したがって、適切なバランスをとるために、管理者はネットワーク インフラストラクチャとユーザーの行動を慎重に検討する必要があります。これにより、リモート通信のための安全かつ効率的な環境が構築され、ユーザーの満足度とデータ保護が促進されます。

追加の構成ファイル オプションの詳細については、クライアント側またはサーバー側の man ファイルを参照してください。

関連記事: