WSL和Linux系统
WSL(windows for linux)是由Microsoft开发的Linux兼容层,运行在Windows系统之上。而Linux系统则是独立的操作系统, 其有很多种大同小异的发行版本,常见的有Ubuntu, CentOS, Mint, Fedora等。主要差别在于:WSL无法使用Linux内核,而是使用微软开发的内核接口换,无法运行尤其是涉及底层系统调用的应用。相同点在于:系统上层应用和系统调度上两者基本一致的。毕竟已经从名字上表明了WSL的使用意图。
总之,wsl是windows子系统,windows可以控制wsl的服务。而且wsl的系统开机逻辑和Linux系统也是一致的。所以解决题目的思路有两个:
思路一,由windows去控制wsl自动启动sshd服务。
思路二,wsl自己设置开机自动启动sshd服务。
本文以WSL2的Ubuntu22.04为例进行讲解,其他操作系统命令大多大同小异,会顺带提一些重点,其他的就不多做赘述了。
方法一:修改windows启动wsl的启动脚本
- win+R键调出运行cmd,输入shell:startup,点击确定后进入开始菜单启动程序目录(大致是C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup);
- 进入到该目录创建一个StartWsl.vbs的文件(可以先创建一个名StartWsl的txt文件,然后在windows的powershell终端,同样进入到该目录,然后输入命令:mv ./StartWsl.txt ./StartWsl.vbs)。
- 编辑该文件
cmd="wsl -d Ubuntu-22.04 -u root -e /etc/init.d/ssh start"
CreateObject("Wscript.Shell").run cmd,vbhide
- 重启wsl服务。以管理者身份打开powershell输入以下命令:
wsl --shutdown
方法二:修改wsl伪Linux的启动脚本
Linux/类Unix系统的服务管理方式
在按思路二解决问题先要搞清楚Linux系统的服务管理方式,否则是没法修改开机配置以自动启动sshd服务的,因为不同的管理方式启动命令完全不一样那个。
- systemd
代表系是Ubuntu16+等,systemd是现代Linux系统常用的服务管理工具,它管理系统服务、设备、机器状态、异常处理等。
主要命令有:
- systemctl:管理系统服务的启动、停止、重启、启用、禁用等
- journalctl:查询系统日志
- loginctl:管理用户登录会话
配置文件主要为服务单元文件,以.service为后缀。
- SysVinit
代表系统:CentOS等,SysVinit是较早的一种管理方式,主要使用/etc/init.d目录下的服务脚本来启动和停止服务。
主要命令有:
- service:启动、停止、重启服务
- chkconfig:设置服务开机自启动
- Upstart
代表系统:Gentoo/Chromiumos等,Ubuntu早期版本使用Upstart进行服务管理,它的配置文件为/etc/init目录下的.conf文件。
主要命令有:
- start/stop/restart 服务:管理服务
- initctl:管理系统服务
- rc.d
代表系统:Builldroot裁剪的Linux系统,多用于嵌入式。rc是最早的服务管理方式,主要使用/etc/rc.d/init.d目录下的脚本来管理服务。
主要命令为服务脚本中的start、stop、restart等来启动和停止服务。
WSL2的Ubuntu22.04的服务管理方式默认是SysVinit,但是可切换为systemd。他们开启开机启动sshd服务的命令分别为:
sudo chkconfig sshd on #SysVinit
sudo systemctl enable sshd #systemd
由于systemd作为一种现代的服务管理方式,更加方便和快捷。rc.d和Upstart方式已被主流替代,SysVinit逐渐被替代。所以推荐选择systemd的管理方式,以后使用linux系统服务会方便很多。切换方式为在wsl的Linux系统的终端输入以下命令:
[ -f /etc/wsl.conf ] && sudo touch /etc/wsl.conf
sudo echo "[boot]" >> /etc/wsl.conf
sudo echo "systemd=true" >> /etc/wsl.conf
然后需要重启wsl服务,以管理者身份打开powershell输入以下命令:文章来源:https://www.toymoban.com/news/detail-700325.html
wsl --shutdown
然后重新代开wsl的终端即可。文章来源地址https://www.toymoban.com/news/detail-700325.html
修改开机脚本
- sytemd管理方式
正常情况下切换到systemd后,不需要做任何事情,因为openssh-server安装后默认开机开启sshd服务。自动开启wsl后,测试命令 ps -aux | grep sshd | wc -l 的值不大于1,就说明sshd服务没有自动开起。大于1就说明成功了。但据网友反馈,wsl原装的openssh-server是有问题的,可能导致服务启动不正常。所以没成功的话请尝试卸载再重装openssh-server,以防万一我们再手动设置开机自动开启sshd服务:
sudo apt remove -purge openssh-server
sudo apt install openssh-server
sudo systemctl enable sshd
- SysVinit管理方式
倘若不想切换管理方式为systemd,要开启开机自动启动sshd服务也是可以的:
sudo chkconfig sshd on
到了这里,关于Windows的WSL子系统,自动开启sshd服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!