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接続のタイムアウトを防ぎ、安定したリモート操作が可能になります。