🚴

WSL内に直接sshしたい

2022/05/13に公開

結論

管理者権限でPowerShellを起動して

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\wsl.exe" -PropertyType String -Force

背景

既存の記事で同様のことを検索すると、WSL内でsshサーバーを起動して、Windowsが外部から受け取ったパケットをポートフォワーディングして接続する手法で行われており、パソコンを再起動するたびに変わるWSLのIPを追従するためにバッチファイルを書いたりする必要があり、とても苦しかった。

なにしているのか

上のコマンドはWindowsのOpenSSHサーバーのレジストリを書き換えるコマンドで、ssh接続がされたときにどのシェルをデフォルトのものとして使うか設定している。

つまり、sshサーバーの実体はWindowsで起動されていて、いちいちsshで接続したあとにwslを打ったりする必要がなくなるだけのこと。

そのため、コマンドの途中の-Valueにわたすパラメータとして他のシェルの絶対パスを渡せば任意のシェルが起動できる。

https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_server_configuration#configuring-the-default-shell-for-openssh-in-windows

GitHubで編集を提案

Discussion