?注意,该解决方案针对的场景是使用ssh连接网络上其他计算机的WSL2(以下称WSL),并非本机自身的WSL。
目前网上很多的方案都是首先在WSL中启动SSH服务,然后再在WSL所在的计算机(宿主机)上配置转发规则达到远程计算机可以连接的目的,这么做的原因也很明确,因为WSL的网络是与宿主机相连的一个虚拟网络,不能跟外界直接联通。
但是,从Windows10开始,系统自身就已经可以安装SSH服务了。所以远程计算机早就可以使用SSH直接连接Windows了。只不过,目前Windows默认连接以后是使用PowerShell作为shell工具。所以,如果把Windows直接作为SSH Server,把SSH 默认提供的PowerShell 替换成WSL2的Bash就能更加简便的解决远程连接WSL的问题,以下是实现步骤:
在WSL2所在的计算机上Windows环境以管理员身份进入PowerShell, 查看OpenSSH Server是否被安装, 通过执行Get-WindowsCapability命令查看:
> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
如果OpenSSH.Server显示没有安装(NotPresent)则执行安装命令:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
安装完成后,启动sshd 服务,可以手动启动也可也设置成自动启动:
# 手动启动
Start-Service sshd
# 设置成自动启动
Set-Service -Name sshd -StartupType 'Automatic'
# 查看服务状态
Get-Service sshd
然后使用命令替换掉ssh服务默认的Shell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\WINDOWS\System32\bash.exe" -PropertyType String -Force
如此以来,就可以使用ssh直接远程连接这台计算机了,用户名密码登录成功后直接进入WSL2的bash界面。
注意!由于这里是直接连接Windows下的SSH Server,所以ssh使用的用户名和密码也是windows的用户名和密码。