それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

WindowsのWSLへ直接SSHする。

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*'

windowsSSHする。

ssh コマンドでログインする。

ssh 192.168.1.189

cmd.exe が開始する。

通常のSSHではcmd.exeが開始する。 f:id:takuya_1st:20220303120211p:plain

ssh/config で接続する。

コマンドにwsl を指定すれば、cmd.exe 経由でwsl.exeが起動し接続される。

# コマンド指定
ssh  -t 192.168.1.189 wsl 
 # 冒頭の ssh_config を使った場合
ssh win-wsl 

f:id:takuya_1st:20220303120407p:plain

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