Windows 10 で VS Code の Remote SSH でリモートマシンへの接続が失敗すると Could not establish connection to "xx". というエラーダイアログが出ます。
エラーの要因はいろいろありますが、VS Code の出力に
[09:22:02.936] > Bad owner or permissions on C:\\Users\\kondoh/.ssh/config > [09:22:02.946] > プロセスが、存在しないパイプに書き込もうとしました。
のように Bad owner or permissions on .../.ssh/config
というメッセージが出る場合は config ファイルのパーミッションが問題があります。Remote SSH の Config File はデフォルトで %USERPROFILE%\.ssh\config
になっていて、同ファイルのパーミッションが 400 になっていない場合にこのエラーになるようです。.ssh はプライベートキーが格納されるディレクトリなので config ファイルのパスを変更する方法で回避してみました*1。
VS Code が提示してくる設定ファイル Remote-SSH:Open Configuration File..
の選択肢には、C:\ProgramData\ssh\ssh_config
があります。
C:\ProgramData\ssh\ssh_config
を選択するとパーミッションエラーでファイルが作成できません。C:\ProgramData
配下にファイルを作るのは管理者権限が必要です。
そこで C:\Users\<user>\.ssh\config
で設定した内容を C:\ProgramData\ssh\ssh_config
にコピーします*2。その後 C:\Users\<user>\.ssh\config
は削除します*3。
これで、無事に VS Code Remote SSH でリモートのプロジェクトを開いて作業できるようになりました。
別の方法として、Remote-SSH:Open Configuration File..
で Settings specify a custom configuration file
で Config File のパスを設定する方法もあります。ユーザプロファイル配下に Config File を作れば、UAC の許可は不要です。
この他、
- 踏み台サーバ経由で接続する場合 ProxyCommand にフルパスを指定する必要がある
- SSL 証明書 (pem ファイル) を使用する場合、これもユーザプロファイル配下に配置しないと
Permissions for 'xxx' are too open.
のようなエラーになる
など、色々とハマりポイントがあります。