【史上最全】外网SSH连接WSL全套解决方案
前言
通过外网SSH连接WSL的技术,实现将Windosws主机作为工作站/服务器,进行远程开发工作。
一、在WSL上安装OpenSSH
建议卸载后重装
sudo apt-get remove openssh-server
sudo apt-get install openssh-server
修改sshd配置文件
sudo vim /etc/ssh/sshd_config
修改以下配置
Port 22 #修改默认端口
PermitRootLogin yes # 允许使用root登录
PasswordAuthentication yes # 允许使用密码认证登录
PubkeyAuthentication yes # 允许公钥认证登录
(可选)公钥写入
1.生成SSH密钥对
在windows主机上
ssh-keygen -t rsa -b 4096 -C “your_email@example.com”
直接按回车,密钥会默认保存在用户主目录下的.ssh文件夹中(例如C:\Users\your_username\.ssh
),文件名为id_rsa
(私钥)和id_rsa.pub
(公钥)
2.公钥添加到wsl
将公钥的内容写入到wsl的~/.ssh/authorized_keys
sudo vim ~/.ssh/authorized_keys
3.测试
windows主机上
ssh username@127.0.0.1 -p 22
二、开放防火墙
在windows主机的防火墙开放对应端口
New-NetFirewallRule -DisplayName ‘“Allow SSH on Port 22”’ -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow
三、ssh服务自动启动脚本
win+r
输入shell:startup
打开当前用户的启动文件夹,该目录下的文件都会开机后自动启动
创建ubuntu.vbs
Set ws = CreateObject(“Wscript.Shell”)
ws.run “wsl -d ubuntu -u root /etc/init.d/ssh start”, vbhide
四、windows端口转发
1.Windows 11 22H2及更高版本
tips:在Windows 11 22H2
及更高版本,wsl2支持镜像网络模式,无需转发端口
修改%UserProfile%/.wslconfig
配置文件
[experimental]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
2.其他版本
wsl的默认网络模式是NAT,在此模式下其他设备需要通过主机端口转发访问wsl应用
win+r
输入shell:startup
打开当前用户的启动文件夹,该目录下的文件都会开机后自动启动
创建ubuntu2.vbs
wslname = “Ubuntu” '要转发端口的Linux系统名称,可以通过 wsl -l 命令查看
wslport = “22” 'Linux系统里要转发的端口
winport = “22” '转发到Windows上的端口'以下代码无需修改
If WScript.Arguments.Length = 0 Then
'用于以管理员权限运行,不然没有权限配置端口转发
CreateObject(“Shell.Application”).ShellExecute “wscript.exe” _
, “”“” & WScript.ScriptFullName & “”" RunAsAdministrator", , “runas”, 1
WScript.Quit
End ifset fso = CreateObject(“Scripting.FileSystemObject”)
set objShell = CreateObject(“WScript.Shell”)
objShell.Run “cmd /c wsl -d Ubuntu -u root /etc/init.wsl start”, 0, True
writeip = objShell.Run(“cmd /c ““wsl -d “+wslname+” -u root hostname -I””>C:\Windows\Temp\wslip.tmp”,0,True)
set f = fso.OpenTextFile(“C:\Windows\Temp\wslip.tmp”, 1)
wslip = f.ReadAll()
f.Close()
command = “cmd /c ““netsh interface portproxy add v4tov4 listenport=”+winport+” listenaddress=0.0.0.0 connectport=”+wslport+" connectaddress="+wslip
forwarding = objShell.Run(command,0,True)
fso.deleteFile(“C:\Windows\Temp\wslip.tmp”)
五、内网穿透
安装zeronews
下载链接
https://www.zeronews.cc/download
教程
https://docs.zeronews.cc/quick-start