您当前的位置:首页 > 计算机 > 系统应用 > Linux

WSL Ubuntu SSH

时间:02-10来源:作者:点击数:

WSL中的IP

wsl中的ubuntuip是动态分配的,每次开机都不一样,而且动态分配的ipwindows系统中的ip不在同一网段,但是我发现在windows中能pingwslubuntuip,这说明子系统与虚拟机不同,在查看ubuntu系统ip时,也有127.0.0.1ip,经实验,在windows中使用这个ip也能访问到子系统,这说明子系统就像是Windows中的一个应用一样,所以,如果windows使用了一个端口,如果wslubuntu也要用到那个端口,则会发生端口占用问题。

为什么要讲这个ip的问题,因为我们在使用Xshell进行连接时,需要指定ubuntuip,如果每次启动系统后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远程连接来操作的,而不是跑到真机那里操作。

wslubuntuSSH服务默认是没有启动的,需要手动启动一下:

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进行启动才可以使用的,在WSLUbuntu默认是没有以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就自动启动了。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门