如何配置WSL的SSH服务?

Linux基础

1 前言

一个问题,一篇文章,一出故事。
笔者系统使用WSL的SSH服务直接登录Windows系统,于是整理如下配置。

2 最佳实践

2.1 准备WSL环境

如何安装Windows Subsystem for Linux(wsl 2)

2.2 配置WSL的SSH服务

2.2.1 进入Linux Shell

【win】+【r】

然后输入,

cmd

然后输入如下命令进入WSL的Shell,

bash

2.2.2 删除旧默认的SSH服务

apt remove -y openssh-server

注:默认的功能不完整

2.2.3 安装SSH服务

apt install -y openssh-server

2.2.4 修改倾听端口

vim /etc/ssh/sshd_config

配置修改如下,

ListenAddress 0.0.0.0
PermitRootLogin yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem       sftp    /usr/lib/openssh/sftp-server

注:重点修改“ListenAddress”参数
配置修改完毕后,通过如下命令重启服务使配置生效,

/etc/init.d/ssh restart

然后,可使用如下命令查看服务状态,

/etc/init.d/ssh status

可见如下显示,

[ ok ] sshd is running.

然后,可通过如下命令查看端口倾听状态,

netstat -antp

可见如下显示,

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      883/sshd
#...

2.3 配置Windows系统端口转发

2.3.1 配置端口转发

【win】+【r】

然后输入,

cmd

可通过如下命令查看当前ssh服务倾听状况,

netstat -ant | find ":22"

可见如下显示,

  TCP    127.0.0.1:22           0.0.0.0:0              LISTENING       InHost
  #...

然后,我们通过如下命令配置端口转发,

netsh interface portproxy add v4tov4 protocol=tcp listenaddress=0.0.0.0 listenport=22 connectaddress=127.0.0.1 connectport=22

然后,可通过如下命令查看配置,

netsh interface portproxy show v4tov4

可见如下配置,

Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
0.0.0.0         22          127.0.0.1       22

另外,如下命令用于逆向操作,

netsh int portproxy delete v4tov4 protocol=tcp listenaddress=0.0.0.0 listenport=22

2.3.2 允许端口转发

netsh advfirewall firewall add rule name=”Open Port 22 for WSL2” dir=in action=allow protocol=TCP localport=22

然后,通过如下命令确认配置,

netsh advfirewall firewall show rule name="Open Port 22 for WSL2"

可见如下配置,

Rule Name:                            Open Port 22 for WSL2
----------------------------------------------------------------------
Enabled:                              Yes
Direction:                            In
Profiles:                             Domain,Private,Public
Grouping:
LocalIP:                              Any
RemoteIP:                             Any
Protocol:                             TCP
LocalPort:                            22
RemotePort:                           Any
Edge traversal:                       No
Action:                               Allow
Ok.

另外,如下命令用于逆向操作,

netsh advfirewall firewall delete rule name="Open Port 22 for WSL2"

2.4 配置服务启动启动

2.4.1 设置计划任务启动服务

单击【This PC】-> 【Manage】->【Task Scheduler】->【Task Scheduler Library】->【Create Basic Task】
窗口显示如下,

如上图所示,
名称属性中填写“Start SSH Service”
单击【Next】
窗口显示如下,

如上图所示,
选择【When the computer starts】
单击【Next】
窗口显示如下,

如上图所示,
选择【Start a program】
单击【Next】
窗口显示如下,

如上图所示,
程序和脚本中填入“%windir%\System32\wsl”
增加参数中填入“/etc/init.d/ssh start”
单击【Next】
窗口显示如下,

如上图所示,
单击【Finish】即可完成配置后双击计划任务【Start SSH Service】
窗口显示如下,

如上图所示,
单击【General】->【Run whether user is logged on or no】->【Run with highest privileges】
单击【OK】并完成设置

2.4.2 重启服务器

shutdown /r /t 0

2.4.3 检查服务启动

C:\Windows\System32\wsl /etc/init.d/ssh status

以上命令用于检查服务器是否启动且与如下命令等价,

C:\Windows\System32\bash.exe /etc/init.d/ssh status

参阅文档
==================
https://www.hanselman.com/blog/how-to-ssh-into-wsl2-on-windows-10-from-an-external-machine

没有评论

发表回复

Linux基础
如何熟悉Linux的PAM模块

1 PAM的简介 1.1 PAM的概念 – PAM即Pluggable Authenti …

Linux基础
如何配置RHEL 8.x OpenSSH客户端登录自动过期?

1 前言 一个问题,一篇文章,一出故事。 基于服务器安全,笔者需要让OpenSSH客户端在10分钟内 …

Linux基础
如何安装部署SentinelOne EDR?

1 基础知识 1.1 软件公司介绍 SentinelOne,Inc.是一家在纽约证券交易所上市的美国 …