安装openssh
首先需要安装openssh-server和openssh-client。
然后修改sshd-config配置
这里需要关注的就是这三行。
1UsePrivilegeSeparation no #因为wsl没有实现chroot
2PasswordAuthentication yes
3ListenAddress 0.0.0.0 #这一项在我的发行版里缺省为注释行。
其他的可以根据需求修改。
1ListenAddress 0.0.0.0 # 要让其他计算机能连接上需要加上这一行,或者把经常需要连接的计算机IP加入
2PermitRootLogin yes # 允许root用户登录。
关闭Windows自带的ssh
我原本还不知道的,查了资料才知道新版Windows自带了ssh服务,不过怎么使用还没有了解。
可以使用powershell来查看这个服务。
1PS C:\Users\user> Get-Service -Name ssh*
2Status Name DisplayName
3------ ---- -----------
4Stopped SshBroker SSH Server Broker
5Stopped SshProxy SSH Server Proxy
在服务控制台里找到这两个服务停掉就行了。
注意要先停掉sshproxy才可以关掉sshbroker。
以调试方式启动ssh
1/usr/sbin/sshd -d
-d表明是以调试方式启动的服务,这种情况下,错误会显示在控制台上。
要注意即使以这种方法启动ssh server,它仍然只是在存在bash窗口时的一个子服务。一旦最后一个bash窗口关闭,这个ssh server也就关闭了,显然这不是我们想要的。接下来看看怎么将ssh server以windows服务或者后台进程来运行。
正常开启ssh
1service ssh start
自动启动ssh服务
当前WSL并不支持ssh server作为服务运行。我们需要借助windows计划任务和脚本,使得在windows启动时自动运行这一服务。
1set ws=wscript.createobject("wscript.shell")
2ws.run "C:\Windows\System32\bash.exe -c '/usr/sbin/sshd -D'",0
将这个文件存为vbs,并在计划任务中添加一个启动任务,触发器设置为系统启动时。
不过使用这个方法的前提是你的WSL默认用户是root,对于默认用户不是root的必须使用sudo方式启动。
执行sudo时,会提示输入密码,而这时又无法拿到用户的输入。要解决这一问题,需要允许sudo在没有密码的情况下执行命令。
在bash里输入命令:
1sudo visudo
1#includedir /etc/sudoers.d
2username ALL=(ALL) NOPASSWD: /usr/sbin/sshd -D
把username改成你自己的用户名即可。