2022-03-04 追記
レジストリの編集権限があるなら、次がおすすめ→windowsのopensshのシェルをcmd.exeから ps/wsl bashへ切り替える。 - それマグで!
以下は、レジストリを触らずに、SSHだけで解決する方法です。
cmd.exe を経由せずに、wsl を起動する
windows添付のopenssh では cmd.exe が開始するが、wslを起動する。
ssh -t 192.168.1.189 wsl
ssh config に記述すると、wsl を直接起動できる。
requesttty と remote command を設定に書けばOK
Host win-wsl hostname 192.168.1.189 RequestTTY force RemoteCommand wsl
試してみる。
実際に試してみたものがこちら。
sshd の準備
WindowsにOpenSSH Server をインストール
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
windows にSSHする。
ssh コマンドでログインする。
ssh 192.168.1.189
cmd.exe が開始する。
通常のSSHではcmd.exeが開始する。
ssh/config で接続する。
コマンドにwsl を指定すれば、cmd.exe 経由でwsl.exeが起動し接続される。
# コマンド指定 ssh -t 192.168.1.189 wsl # 冒頭の ssh_config を使った場合 ssh win-wsl
WSLのディストリを選ぶ。
ssh -t 192.168.1.189 wsl.exe --distribution ubuntu2204 ssh -t 192.168.1.189 wsl.exe --distribution debian
色々できそう。
制限事項
RequestTTY force して、RemoteCommandをしているので、引数でコマンドを実行ができない。
## これはできない。 ssh win-wsl pwd ssh win-wsl -- ls -alt
まぁ十分なのですが、たまに不便ですよね。
VS Codeなども
VS Codeでも、SSHに直接アクセスできるようになるので、ターミナルが使えるようになります。
multipass ubuntu でポート開けてもいい
ここまでやって制限事項を受け入れてWSLの世界に拘る理由もないので、multipass でubuntu インストールしてポート開けたほうが楽じゃないのかと思ったり。
参考資料
https://github.com/microsoft/vscode-remote-release/issues/3257