wsl中的ubuntu的ip是动态分配的,每次开机都不一样,而且动态分配的ip和windows系统中的ip不在同一网段,但是我发现在windows中能ping通wsl中ubuntu的ip,这说明子系统与虚拟机不同,在查看ubuntu系统ip时,也有127.0.0.1的ip,经实验,在windows中使用这个ip也能访问到子系统,这说明子系统就像是Windows中的一个应用一样,所以,如果windows使用了一个端口,如果wsl中ubuntu也要用到那个端口,则会发生端口占用问题。
为什么要讲这个ip的问题,因为我们在使用Xshell进行连接时,需要指定ubuntu的ip,如果每次启动系统后ip都改变的话,连接时也要修改,比较麻烦,解决的办法就是在Xshell中使用127.0.0.1来连接wsl中的ubuntu即可,这样就不用管ubuntu中的ip如何变动了。
发现在WSL中安装的Ubuntu无法使用SSH连接上,经过一翻摸索解决了问题,安装的Ubuntu版本为Ubuntu 22.04.1 LTS,其它版本不知道是不是也能这样解决,大家可以自行试一下。
你可能会疑问,Windows中直接就可以打开子系统来使用了,为什么还要用SSH去链接呢?因为Windows的子系统客户端界面并不是很好,而像Xshell等的一些SSH客户端已经有多年历史,不论是界面还是使用上都非常的好用了,所以我选择使用SSH连接,而且这也符合以后的真实开发,因为真实开发都是用SSH远程连接来操作的,而不是跑到真机那里操作。
wsl中ubuntu的SSH服务默认是没有启动的,需要手动启动一下:
sudo service ssh start
此时报如下错误:
这时我们把SSH再安装一下:
sudo apt install ssh
安装之后再启动SSH:
sudo service ssh start
这时就能启动成功了,结果如下:
通过sudo ps -e | grep ssh命令也能看到启动成功了,如下:
此时就可以使用Xshell进行连接了。连接成功的效果如下:
如上图,可以看到,这里我是使用127.0.0.1这个ip进行连接的。
查看WSL中子系统的情况,在Windows Powershell中执行如下命令:
wsl -l -v
结果如下:
这说明Ubuntu系统正在运行,我们使用如下命令关闭它:
wsl -t Ubuntu
结果如下:
如上图,可以看到关闭是需要一点时间的,执行关闭命令后,立马查看发现它还是运行状态,多查看几次就会发现它已经关闭了。
我们再次启动Ubuntu,在Windows Powershell中直接输入ubuntu即可启动,效果如下:
再次查看SSH服务的启动状态:
sudo ps -e | grep ssh
结果如下:
这说明SSH默认并不会开机启动。
通过systemctl可以设置服务的启动和关闭以及开机启动,使用systemctl要求系统要以systemd进行启动才可以使用的,在WSL的Ubuntu默认是没有以systemd启动的。比如我们使用systemctl来启动ssh服务,命令如下:
sudo systemctl start ssh
结果如下:
如上图,报错提示说明系统确实没有用systemd来启动系统。那我们就需要设置开机使用systemd启动系统,通过在/etc目录下创建一个wsl.conf的配置文件来配置使用systemd,执行如下命令:
sudo vim /etc/wsl.conf
然后输入如下内容:
[boot]
systemd=true
保存文件。然后关闭Ubuntu重启即可,在Windows Powershell中输入如下命令:
关闭Ubuntu
wsl --shutdown
之前我们使用wsl -t Ubuntu命令来关闭Ubuntu,上面的命令为关闭所有的子系统,比如你安装了多个Ubuntu或其它Linux系统,--shutdown会一次关闭所有的子系统。大家看自己喜欢,用哪个命令都可以。
启动Ubuntu
ubuntu
此时再来启动SSH服务:
sudo systemctl start ssh
这次执行就不会报错了,执行效果如下:
注:这里我们没有使用start sshd,而是start ssh,但是发现启动的同样是sshd。
可以看到sshd启动了。说明systemctl命令可以正常使用了,那就可以使用此命令来设置sshd服务为开机启动了,如下:
sudo systemctl enable ssh
执行结果如下:
注:要用enable ssh,不要用enable sshd,否则报错的提示会是另一个提示,另一个提示的话看不出如何解决问题。而上面的提示能看出来如何解决问题,提示我们使用/lib/systemd/systemd-sysv-install这个脚本来启动服务,执行如下命令:
/lib/systemd/systemd-sysv-install enable ssh
又报错了,如下:
这其实是因为权限的问题,加上sudo即可,如下:
我们再次关闭Ubuntu并重启,然后查看sshd是否有自动启动,如下:
如上图,可以看到,Ubuntu启动时sshd就自动启动了。