Windows がアップデートされたことで、今まで動いていた構成が急に動かなくなりました。
なぜこうなったのか、どうやって解決したか記録しておきます。
こんな構成にしていた
できるだけ Microsoft が提供しているものを使う・それ以外は Pageant だけ、という構成にして運用していました。
+-------------------------------------------------------------+
| Windows |
| VSCode |
| Remote SSH |
| ssh.exe (Windows搭載) --- Pageant |
| | .ssh/config --openssh-config オプション |
| | pageant.conf <---------+ |
+---------|---------------------------------------------------+
|
+---------|--------------------------+
| Linux sshd |
| ここにあるファイルを VSCode で編集 |
+------------------------------------+
起きた問題と解析
ある日突然(ユーザはこれを「何もしていないのに」と言う)、VSCode で Linux サーバのファイルを見ようとしたところ SSH 接続ができなくなりました。
VSCode の エラーメッセージは Could not establish connection to "xxx.example.com".
というものでした。
OUTPUT では プロセスが、存在しないパイプに書き込もうとしました。
というエラーが出ていました。
-
(get-childitem \\.\pipe\).FullName
で確認したところ、pipe は作成されている- pipe 名は
\\pipe.\pageant.(ユーザ名).(ランダム文字列)
- pipe 名は
- pageant.conf には同じ pipe 名が書き込まれている
- ssh.exe -vvv で接続して詳細を確認
debug3: unable to connect to pipe \\.\\pipe\\pageant.(ユーザ名).(ランダム文字列), error: 3
- Windows の OpenSSH がアップデートされたことを知っていたので、OpenSSH 8.6p1(Windows アップデートがあたっていないマシンの ssh.exe を持ってきた)で接続したところ、問題なく接続できる
OpenSSH 8.6p1 では Pageant に接続できてリモートに接続できる、9.5p1 だと Pageant に接続できないためリモートに接続できない、という状況がわかりました。
また、ssh.exe が表示するパイプ名だけ、.
以降の \
が重複していることに気づいて調べていったら GitHub に issue を見つけました。
https://github.com/powershell/win32-openssh/issues/1949#issuecomment-2404790143
PuTTY 0.79 から、使われる記号が \
から /
に変更されたそうです。
使っていた Pageant は 0.78 のものでした。
まとめ
原因1. Windows の OpenSSH がアップデートされた
2024年10月のセキュリティ更新プログラムで OpenSSH にアップデートが入り、OpenSSH のバージョンが 8.6p1 から 9.5p1 に上がりました。
Before
OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
2022-05-06 23:15
1,073,152 bytes
After
OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2
2024-10-09 09:07
1,243,648 bytes
OpenSSH 8.9 でパスの区切り記号の扱いが変更されたものと思われます。(後述の PuTTY のコミットログによる)
原因2. 使っていた Pageant が古かった
Pageant 0.79 でパイプ名の区切り記号が変更されました。これは OpenSSH の変更への対策のようです。
Pageant を 0.78 のものから最新 (0.81) のものにしたら、pageant.conf ファイルに出力されるパイプ名が //pipe./pageant.(ユーザ名).(ランダム文字列)
になりました。
OpenSSH 9.5p1 の ssh.exe(Windows のもの)からサーバに接続できるようになりました。
動作する/しない組み合わせ
OpenSSH \ Pageant | -0.78 | 0.79- |
---|---|---|
8.6p1 | OK | OK |
9.5p1 | NG | OK |
おわりに
導入が簡単になるよう、できるだけ Microsoft が提供するものを使っていました。
それでも Windows アップデートによりバージョンが上がり、バージョンの組み合わせによる問題が起きるものだな、という経験をしました。