windows和wsl2的ssh服务
windows和wsl2的ssh服务

windows和wsl2的ssh服务

windows的SSH

openSSH安装

官方安装文档

https://learn.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse?source=recommendations&tabs=gui

作为客户端向外连接:

image-20240430103013119

当你使用 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 是你想要克隆的仓库名。

image-20240430103425438

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包安装,双击运行即可。

img

安装完成后,默认启动,你也可以使用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

img

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地址:

img

根据你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转发!

发表回复

您的电子邮箱地址不会被公开。