前言
现在自己遇到这样一个问题, 前面说过自己wsl配置了ssh server, 可以通过xshell来远程wsl进行工作, 但是有一个问题就是需要ssh server先启动, 这样的话每次使用wsl之前还要先启动一下ssh server, 很不方便, 理想的状态应该是电能开机之后, 打开xshell, 可以立即通过ssh远程wsl, 而不用再打开wsl终端, 启动ssh, 然后再用xshell远程.
针对此需求我上网查了许多教程, 中间历经了几次失败, 幸运的是最终成功了, 下面就记录一下自己的设置过程.
如何在windows端启动wsl的服务
wsl的开机自启动服务和独立的linux系统不同, 不能按照普通linux系统的方式来设置开机自启动, 所以需要我们曲线救国一下, 通过在windows端启动wsl的服务来控制wsl.
这里就以启动ssh为例, 具体内容如下, 主要参考的是这篇文章.
其实很简单, 就是在cmd中运行wsl的命令, 具体为;
C:\Users\用户名\AppData\Local\Microsoft\WindowsApps\ubuntu1804.exe run "sudo service ssh start"
运行这个命令就可以启动wsl的ssh服务了, 但是这里涉及到两个问题, 就是sudo需要输入密码, 还有如何开机启动命令, 下面说一下我的做法.
开机启动
- 创建一个批处理文件WSLsshAutoStart.bat, 然后把上面的命令复制进去, 保存.
- 将上面创建的文件保存起来, 然后创建一个快捷方式, 右键属性->选择最小化窗口运行.
- win+r, 输入shell:startup, 打开windows的启动文件夹, 将上面创建的快捷方式放进去.
经过上面的操作就可以实现开机运行了, 下面再说一下sudo的问题.
sudo免密码
关于这个问题有两种方法, 一种是直接root用户登录wsl, 这样的话就不用sudo了, 这也是上面参考的那篇文章中使用的方法, 我没试过, 因为我不想直接root登录; 第二种方法就是设置wsl的用户sudo时免密码, 我采用的是这种方法, 参考的文章主要是https://www.jianshu.com/p/9aee0e06aba8, 具体方法是:
修改sudoers文件, 在wsl中切换到root用户或者直接sudo操作.
# 先添加写权限
sudo chmod u+w /etc/sudoers
# 在文件里添加一行, 可以在root ALL=(ALL:ALL) ALL下面加.
usrname ALL=(ALL) NOPASSWD:ALL
# 保存后恢复文件权限
sudo chmod u-w /etc/sudoers
修改之后可以测试一下, 看看sudo是不是不需要密码了.
总结
通过上面三大步操作, 就可以实现电脑开机之后, 自动运行WSLsshAutoStart.bat里面的命令, 启动wsl的ssh服务, 我们就可以直接通过ssh访问wsl了, 还可以通知把32位支持也起一下哦.
最后
因为我本人对cmd的命令操作不是很熟悉, 所以有什么问题大家多担待哈, 出现问题请自行恢复原样.