TL;DR
ssh://<username>@<host>:<port>
形式のリンクをクリックして WinSCP 経由で PuTTY を開くと、 PuTTY のデフォルト設定で有効にしている keepalives が効きません。これは WinSCP 側の設定で上書きされてしまっていることが原因であるため、 WinSCP 側のデフォルト設定を変更すれば解消できます。
困ったこと
PuTTY を使ってサーバへ接続しているとき、しばらく何もしないでいるとセッションが切断されてしまうことがあります。多くの場合、これは keepalives を有効にすることで防ぐことができるため、デフォルトで設定しておくのが便利です。しかし、いつからか ssh://<username>@<host>:<port>
形式のリンクから PuTTY を起動したときにだけ、このデフォルト設定が効いていない(設定値 0 (turn off)
で上書きされている)ことが分かりました。
- デフォルト設定。30秒で設定している。
ssh://
リンククリックで開いたセッションの設定。0秒で設定されている。
PuTTY 自体には ssh://
リンクとの紐づけ設定はない
PuTTY 自体にアプリを ssh://
リンクと紐づける設定はありません。筆者の環境では、別途インストールした WinSCP によって、リンククリック時に PuTTY が開くようにしていました。
※WinSCP のインストール時に「Typical installation (recommended)」を選択するか、「Custom installation」を選択の上で「Register to handle URL addresses」を有効にしていれば、上記の設定となります。設定の詳細はドキュメントを参照ください。
WinSCP 側の設定値で上書きされていたことが原因
ということで、リンクから PuTTY を起動する WinSCP 側でなにか設定を上書きしているのではないかと考えました。筆者のOS環境、および、各アプリのバージョンはそれぞれ次の通りです。
- OS: Windows 11 Pro
- PuTTY: Release 0.81 ※執筆時点での最新版
- WinSCP: 6.3.4 ※執筆時点での最新版
WinSCP におけるデフォルトの keepalives 設定を変更してみました。手順は次の通りです。
WinSCP におけるデフォルト keepalives 設定
- 「Login」ダイアログ内にある「Advanced...」ボタンを押下して「Advanced Site Settings」ダイアログを開きます。
- ダイアログ内の「Connection」ページから、「Keepalives」で「OFF」以外の値※を選択し、「Seconds between keepalives」の値に希望の値を入力します。ここでは、分かりやすいように PuTTY 側のデフォルト値である30秒ではなく、40秒を設定してみました。その後、「OK」ボタンを押下して設定を確定します。 ※「Sending of null SSH packets」と「Executing dummy protocol commands」の違いはドキュメントを参照ください。
- 「Login」ダイアログ下部の「Manage」ボタンをクリックし、メニューから「Set Dafaults」を選択することで、現在の設定内容がデフォルトとして設定されます。
WinSCP 側の設定が反映された
上記の設定後、再び ssh://<username>@<host>:<port>
形式のリンクから PuTTY を開いてみたところ、 Keepalives の設定に WinSCP の設定値が反映されました。