WSL中的IP
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
如何变动了。
解决SSH无法连接问题
发现在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进行连接的。
设置SSH开机启动
查看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
就自动启动了。