【PowerShell】SSH接続をタイムアウトさせない方法|KeepAlive設定

PowerShellを使ってSSH接続を行う際、一定時間操作を行わないと「タイムアウト」により接続が切断されてしまうことがあります。長時間のリモート作業や監視を行う際には、このタイムアウトを防ぐ設定が重要です。本記事では、SSH接続を維持するためのKeepAlive設定の方法を紹介します。

SSH接続がタイムアウトする原因

SSH接続が切れる原因の多くは、以下のような要因です。

  • サーバー側のアイドルタイムアウト設定
  • クライアント側(PowerShell/OpenSSH)のアイドル状態検知
  • ネットワーク機器によるアイドルセッション切断

解決方法1:configファイルでKeepAliveを有効化

PowerShellのSSHクライアントでは、~/.ssh/config に設定を追加することで、KeepAliveを有効にできます。

Host your-server
  HostName example.com
  User your-username
  ServerAliveInterval 60
  ServerAliveCountMax 5
  • ServerAliveInterval 60:60秒ごとにサーバーに信号を送る
  • ServerAliveCountMax 5:5回応答がなければ接続を切断する

この設定により、アイドル状態でも定期的にパケットが送られ、タイムアウトを防ぐことができます。

解決方法2:コマンドラインで指定

一時的にKeepAliveを有効にする場合は、PowerShellのSSHコマンドにオプションを追加します。

ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=5 your-username@example.com

configファイルを編集できない環境では、この方法が便利です。

解決方法3:サーバー側の設定変更

管理者権限がある場合は、サーバー側のSSH設定ファイル /etc/ssh/sshd_config を編集し、タイムアウトを防止できます。

ClientAliveInterval 60
ClientAliveCountMax 5

編集後はSSHサービスを再起動してください。

sudo systemctl restart sshd

Windows特有の注意点

  • 改行コードの違い:Windowsで作成した.ssh/configファイルはCRLFになりやすく、正しく読み込まれない場合があります。エディタでLFに変換してください。
  • 文字コード:UTF-8(BOMなし)で保存する必要があります。

まとめ

PowerShellでSSH接続を長時間維持したい場合は、以下の方法で対応できます。

  • クライアント側でServerAliveIntervalを設定
  • サーバー側でClientAliveIntervalを調整
  • Windows特有の改行コード・文字コード問題に注意

これらを組み合わせることで、SSH接続のタイムアウトを防ぎ、安定したリモート操作が可能になります。