WSL Ubuntu SSH

WSL Ubuntu SSH发现在WSL中安装的Ubuntu无法使用SSH连接上,进过一翻摸索解决了问题,安装的Ubuntu版本为,其它版本不知道是不是也能这样解决,大家可以自行试一下。WSL中的Ubuntu默认是没有安装net-tools的,这样就无法使用ifconfig命令查看ip,所以先安装一下net-tools使用ifconfig查看ip,并在Windows的CMD中ping,发现虽然ip不在同一个网段,却能ping通。然后我们使用Xshell进行链接,连接不上,如下:这是因为Ubuntu中的SSH服务并没有启动,通过。

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就自动启动了。

今天的文章WSL Ubuntu SSH分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31042.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注