windows的SSH
openSSH安装
官方安装文档
作为客户端向外连接:
当你使用 ssh -T git@github.com 命令时,你实际上是在测试你的SSH密钥是否已经正确配置,以便与GitHub进行通信。ssh -T 选项会尝试建立一个SSH连接,但不执行任何命令(-T 表示 "pseudo-terminal will not be allocated",即不分配伪终端)。
输出信息 "Hi lemonguess! You've successfully authenticated, but GitHub does not provide shell access." 意味着你的SSH密钥认证成功,你已经成功连接到GitHub的SSH服务器。但是,GitHub的SSH服务仅用于Git操作,并不提供传统的shell访问权限。这是GitHub的一个安全策略,以防止未经授权的访问和潜在的安全风险。
因此,如果你只是想检查SSH连接是否正常,那么这条信息说明一切正常。如果你想使用SSH来克隆、推送或拉取Git仓库,你可以继续执行相应的Git命令,比如 git clone git@github.com:username/repo.git。这里的 username 是你的GitHub用户名,repo 是你想要克隆的仓库名。
ssh服务正常。
作为服务端被连接:
...
win10中 wsl1升级成wsl2后,ubuntu主机通过ssh远程连接wsl2中ubuntu连接不上,在wsl1中是可以直接连接的。网上查资料得到的信息是因为wsl2网络连接的方式与wsl1不同,具体怎么不同不详细说了,只说解决方式。
离线包安装
在win平台使用openssh时,需要安装openssh的客户端和服务端。有时使用微软官方推荐的设置-应用-可选应用安装时会出错,重启也不能解决。
这时建议使用离线安装包一键安装。
github安装包链接:Releases · PowerShell/Win32-OpenSSH (github.com)
https://github.com/PowerShell/Win32-OpenSSH/releases
我是64位的系统,我选择msi包安装,双击运行即可。

安装完成后,默认启动,你也可以使用net start sshd 来启动ssh
设置自动重启sshd服务 Set-Service sshd -StartupType Automatic
测试安装完成
首先要保证wsl2中ubuntu开启了openssh-server正常运行。
1、删除原来的openssh-server
sudo apt remove --purge openssh-server
sudo apt autoremove
2、安装openssh-server
sudo apt update
sudo apt upgrade
sudo apt install openssh-server
3、配置/etc/ssh/sshd_config
sudo vi /etc/ssh/sshd_config
主要改下面这部分内容:
Port 22 # 端口号 ssh服务默认都是22,设置成22的话,ssh连接的时候不用在指定 -p
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
PasswordAuthentication yes # 是否允许使用密码登录
4、重启ssh服务
sudo service ssh --full-restart
端口转发
1、首先进入wsl2中ubuntu系统内,查看ubuntu子系统ip地址
ifconfig

ubuntu子系统ip
2、然后管理员权限打开powershell,输入如下命令(最关键的一步!):
netsh interface portproxy set v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=<ubuntu子系统ip>
将<ubuntu子系统ip>替换为上一步查到的ip地址
防火墙设置
开启防火墙入站规则
netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=22
也可以在控制面板 --> Windows Defender 防火墙 --> 高级设置 --> 入站规则中设置
测试
查看win10主机ip,打开win10的powershell,运行ipconfig:
ipconfig
得到的win10主机的ip地址:

根据你win10主机具体是用哪个网络、有线还是无线等选择
ubuntu主机终端远程连接win10 wsl2中ubuntu:
ssh <用户名>@<win10主机ip>
请注意:上面的<用户名>用win10 wsl2中ubuntu子系统的用户名,<win10主机ip>就是用上一步查到的win10主机ip即可。
scp传输文件与ssh命令使用方式一样。
问题
虽然上面这些操作能使ubuntu主机远程ssh win10上的wsl2 ubuntu子系统了,但我目前还没有找到能在wsl2 ubuntu内直接远程ssh ubuntu主机的办法。。。
不过win10本身可以通过powershell终端ssh到远程到ubuntu主机,且因为wsl2子系统与win10硬盘共用,所以也没必要非得在wsl2 ubuntu子系统内去ssh远程ubuntu主机了。
至此,ubuntu主机和win10 wsl2 ubuntu子系统双向连接及文件传输通道已打通。
总结
wsl2与wsl1 ssh服务最大的不同是,其他主机可以远程ssh直连wsl1子系统内ip,而不能直连wsl2,必须通过win10转发!