1 前言
一个问题,一篇文章,一出故事。
笔者系统使用WSL的SSH服务直接登录Windows系统,于是整理如下配置。
2 最佳实践
2.1 准备WSL环境
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
没有评论