世界上最好的 Linux 发行版 Bash on Windows 已经升级到了 Ubuntu 18.04 ,并且提供越来越多的功能。下面是笔记,记录如何启动子系统的 SSHD 服务并设置开机自动启动,也顺带开机自动启动了子系统。
1、安装 SSHD
# 第一次安装之前先 update,否则可能装不上后续的软件。
sudo apt update
sudo apt install openssh-server
2、配置 SSHD
修改 sshd 设置,即文件 sudo vim /etc/ssh/sshd_config
:
AllowUsers yourusername
# 注意下面这一行是修改对应的行,将原来的 no 改为 yes,而不是新增一行。
# 新增一行会导致错误「Disconnected:No supported authentication methods available」
PasswordAuthentication yes
3、启动 SSHD
下面命令可以重启 SSHD 服务:
sudo service ssh --full-restart
我们也可以通过service ssh status
查看状态。
4、配置 windows 防火墙
经过上面配置,在本地就可以通过 SSH 访问子系统了,地址可以用实际 IP、localhost 或 127.0.0.1。
如果想在其他机器通过 SSH 访问本机的子系统,还需要在防火墙放行 22 端口。
在「设置」---「防火墙和网络保护」---「高级设置」里,增加一条「入站规则」:规则选「端口」,下一步应用 TCP ,特定本地端口填「22」,后面的根据需要,默认可全选上。
5、自动启动 SSH 服务
一旦关掉 bash.exe 进程, ssh 就无法连接了,我们需要解决开机自动启动 bash 和 SSHD 服务的问题。以下方案来自 https://stray.love/itshou-zha/bash-on-windows-kai-qi-ssh-bing-kai-ji-qi-dong:
解决这个问题分两个个步骤:
1、添加启动项,让 bash.exe 随机启动,并执行启动 SSH 的命令。
按win + r
之后,输入 shell:startup
,会打开 win10 的开机启动任务文件夹。在该文件夹下新建一个wsl.vbs
文件:
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe",0
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/service ssh start'",0
2、上面脚本试图在子系统里执行 sudo /usr/sbin/service ssh start
。该命令默认还需要输入密码不能自动化,所以需要配置一下免除该命令的密码。
运行 sudo visudo
(实际编辑了文件/etc/sudoers
,不过这个文件默认不可写,因此需通过 visudo
来操作),添加如下配置:
your_username ALL = (root) NOPASSWD: /usr/sbin/service
Q. E. D.