Windows 11 自带 OpenSSH 客户端,因此可以直接通过 SSH 连接 VPS。除了远程登录服务器,SSH 还可以用来做 TCP 端口转发,把本机服务、VPS 服务,或者内网中的某个服务通过一条 SSH 加密连接打通。
本文主要讨论两个常用场景:
-L:本地端口转发,Win11 访问 VPS 侧服务-R:远程端口转发,VPS 或公网访问 Win11 侧服务
这两种方式都不需要额外安装 frp、ngrok 等工具,适合少量端口、个人运维、远程调试、临时发布内部服务等场景。
1. 基本概念
SSH 隧道的核心作用是:通过已有的 SSH 连接,把某个 TCP 端口安全地转发到另一端。
常见命令格式:
ssh user@server
其中:
user = VPS 上的 SSH 用户名server = VPS 的公网 IP 或域名
例如:
ssh root@1.2.3.4ssh ubuntu@vps.example.com
如果 VPS 的 SSH 端口不是默认的 22,可以使用 -p 指定:
ssh -p 2222 ubuntu@1.2.3.4
SSH 端口转发常用参数:
-L:本地端口转发-R:远程端口转发-N:只建立连接和转发,不打开远程 shell
2. 密码登录与密钥登录
如果 VPS 允许密码登录,可以直接执行:
ssh user@VPS公网IP
然后输入 VPS 上对应用户的密码。
更推荐使用密钥登录。Win11 PowerShell 中生成密钥:
ssh-keygen -t ed25519 -C "your_email@example.com"
默认生成:
C:\Users\你的用户名\.ssh\id_ed25519C:\Users\你的用户名\.ssh\id_ed25519.pub
其中:
id_ed25519 私钥,保存在 Win11 本机,不要泄露id_ed25519.pub 公钥,放到 VPS 上
把公钥添加到 VPS:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@VPS公网IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
以后再连接 VPS 时,就可以使用密钥认证。
3. 本地端口转发:ssh -L
本地端口转发用于:
Win11 访问 VPS 侧可访问的服务
命令格式:
ssh -N -L 本地监听地址:本地端口:目标地址:目标端口 user@VPS公网IP
其中:
本地监听地址:本地端口= Win11 上打开的入口目标地址:目标端口= VPS 那一侧能够访问到的服务
例如,VPS 上有一个 Web 服务,只监听本机:
VPS: 127.0.0.1:8080
外部不能直接访问 VPS公网IP:8080,但可以通过 SSH 隧道访问:
ssh -N -L 127.0.0.1:18080:127.0.0.1:8080 user@VPS公网IP
然后在 Win11 浏览器中打开:
http://127.0.0.1:18080
实际访问的是 VPS 上的:
127.0.0.1:8080
数据路径:
Win11→ 127.0.0.1:18080→ SSH 加密连接→ VPS→ 127.0.0.1:8080
常见用途:
访问 VPS 上未开放公网的 Web 管理页面访问 VPS 本机数据库访问 VPS 内网中的某个服务远程调试只监听 127.0.0.1 的程序
4. 示例:Win11 访问 VPS 上的数据库
假设 VPS 上的 MySQL 只监听:
127.0.0.1:3306
Win11 可以执行:
ssh -N -L 127.0.0.1:3307:127.0.0.1:3306 user@VPS公网IP
然后 Win11 上连接:
127.0.0.1:3307
实际访问的是 VPS 上的:
127.0.0.1:3306
这样数据库端口不需要暴露到公网,只有建立 SSH 连接后才能访问。
5. 示例:Win11 访问 VPS 内网服务
如果 VPS 能访问某个内网地址:
10.0.0.25:80
Win11 可以这样转发:
ssh -N -L 127.0.0.1:18080:10.0.0.25:80 user@VPS公网IP
然后 Win11 打开:
http://127.0.0.1:18080
实际访问:
http://10.0.0.25:80
这里的关键是:目标地址:目标端口 必须是 VPS 那一侧能访问到的地址。
6. 远程端口转发:ssh -R
远程端口转发用于:
VPS 访问 Win11 侧的服务
也可以理解为:Win11 主动连接 VPS,然后在 VPS 上打开一个端口,访问这个端口的流量会通过 SSH 连接回到 Win11。
命令格式:
ssh -N -R VPS监听地址:VPS端口:Win11侧目标地址:Win11侧目标端口 user@VPS公网IP
例如 Win11 本机有一个服务:
Win11: 127.0.0.1:3000
想让 VPS 访问这个服务,可以执行:
ssh -N -R 127.0.0.1:9000:127.0.0.1:3000 user@VPS公网IP
然后在 VPS 上访问:
curl http://127.0.0.1:9000
实际访问的是 Win11 上的:
127.0.0.1:3000
数据路径:
VPS→ 127.0.0.1:9000→ SSH 加密连接→ Win11→ 127.0.0.1:3000
这种方式适合 Win11 在 NAT、路由器、公司网络后面,没有公网 IP,但又需要让 VPS 访问 Win11 上某个服务的情况。
7. 让公网访问 Win11 上的服务
如果只写:
ssh -N -R 127.0.0.1:9000:127.0.0.1:3000 user@VPS公网IP
那么 VPS 上的 9000 端口只监听在 127.0.0.1,只有 VPS 本机能访问。
如果想让公网访问:
http://VPS公网IP:9000
需要让 VPS 的转发端口监听公网地址:
ssh -N -R 0.0.0.0:9000:127.0.0.1:3000 user@VPS公网IP
但是仅写这个命令通常还不够。VPS 的 SSH 服务端需要允许远程端口绑定公网地址。
编辑 VPS 的 SSH 服务端配置:
sudo nano /etc/ssh/sshd_config
确认或添加:
AllowTcpForwarding yesGatewayPorts clientspecified
检查配置是否正确:
sudo sshd -t
没有输出通常表示配置语法正常。
重启 SSH 服务:
sudo systemctl restart sshd
部分系统服务名是 ssh:
sudo systemctl restart ssh
然后 Win11 重新建立连接:
ssh -N -R 0.0.0.0:9000:127.0.0.1:3000 user@VPS公网IP
在 VPS 上检查监听情况:
ss -lntp | grep 9000
如果看到:
0.0.0.0:9000
说明已经监听公网 IPv4。
如果看到:
127.0.0.1:9000
说明仍然只允许 VPS 本机访问,通常是以下原因之一:
GatewayPorts 没有配置SSH 服务没有重启命令中没有写 0.0.0.0:9000配置文件改错位置VPS 使用了另一个 sshd 配置文件
8. GatewayPorts 的作用
AllowTcpForwarding yes 通常默认已经开启。
但 GatewayPorts 如果没有写,默认通常等同于:
GatewayPorts no
这表示:ssh -R 可以建立,但 VPS 上打开的端口只绑定在本机地址,公网不能直接访问。
常见配置含义:
GatewayPorts no远程转发端口只监听 VPS 本机 localhost。GatewayPorts yes允许远程转发端口绑定公网地址,控制较粗。GatewayPorts clientspecified允许客户端在 ssh -R 命令中自己指定监听地址。
推荐使用:
GatewayPorts clientspecified
这样可以自己决定:
-R 127.0.0.1:9000:127.0.0.1:3000
还是:
-R 0.0.0.0:9000:127.0.0.1:3000
前者只允许 VPS 本机访问,后者允许公网访问。
9. 转发 Win11 所在内网中的其他设备
ssh -R 不只能转发 Win11 本机服务,也可以转发 Win11 所在内网里的其他设备。
假设 Win11 能访问内网设备:
192.168.1.50:80
可以这样执行:
ssh -N -R 0.0.0.0:9000:192.168.1.50:80 user@VPS公网IP
访问路径:
外部用户→ VPS公网IP:9000→ SSH 加密连接→ Win11→ 192.168.1.50:80
此时 Win11 相当于连接了 VPS 和本地内网。
需要注意:这种方式会把内网设备通过 VPS 暴露出去,必须谨慎控制访问权限。
10. VPS 防火墙和云厂商安全组
即使 SSH 隧道已经建立,如果公网仍然访问不到 VPS 端口,还需要检查:
VPS 系统防火墙云厂商安全组VPS 服务商控制台防火墙
如果使用 ufw:
sudo ufw allow 9000/tcpsudo ufw status
如果只允许某个固定 IP 访问:
sudo ufw allow from 你的公网IP to any port 9000 proto tcp
如果使用 firewalld:
sudo firewall-cmd --permanent --add-port=9000/tcpsudo firewall-cmd --reload
检查 VPS 端口是否监听:
ss -lntp | grep 9000
检查本机能否访问:
curl http://127.0.0.1:9000
Win11 上可以测试端口连通性:
Test-NetConnection VPS公网IP -Port 9000
11. 保持 SSH 隧道稳定
建议加上保活和失败退出参数:
ssh -N ` -o ServerAliveInterval=30 ` -o ServerAliveCountMax=3 ` -o ExitOnForwardFailure=yes ` -R 127.0.0.1:9000:127.0.0.1:3000 ` user@VPS公网IP
参数含义:
ServerAliveInterval=30每 30 秒发送一次保活包。ServerAliveCountMax=3连续 3 次无响应后断开连接。ExitOnForwardFailure=yes如果端口转发失败,SSH 直接退出,避免出现连接存在但端口没转发成功的情况。
如果需要长期运行,可以结合 Windows 任务计划程序,在开机或登录时自动执行 PowerShell 脚本。
12. 使用 SSH config 简化命令
可以编辑 Win11 上的 SSH 配置文件:
C:\Users\你的用户名\.ssh\config
例如:
Host myvps HostName 1.2.3.4 User ubuntu Port 22 IdentityFile C:\Users\你的用户名\.ssh\id_ed25519 ServerAliveInterval 30 ServerAliveCountMax 3 ExitOnForwardFailure yes
以后可以直接:
ssh myvps
本地转发:
ssh -N -L 127.0.0.1:18080:127.0.0.1:8080 myvps
远程转发:
ssh -N -R 127.0.0.1:9000:127.0.0.1:3000 myvps
也可以把端口转发写进配置文件:
Host web-tunnel HostName 1.2.3.4 User ubuntu Port 22 IdentityFile C:\Users\你的用户名\.ssh\id_ed25519 LocalForward 127.0.0.1:18080 127.0.0.1:8080 ServerAliveInterval 30 ServerAliveCountMax 3 ExitOnForwardFailure yes
启动:
ssh -N web-tunnel
13. SSH 隧道与 frp 的区别
SSH 隧道适合:
少量端口临时调试个人使用访问 VPS 上未开放公网的服务让 VPS 访问 Win11 上的某个服务不想额外安装程序希望使用系统自带 OpenSSH
frp 更适合:
长期运行多个服务统一管理多客户端接入HTTP/HTTPS 域名转发UDP 转发复杂内网穿透开机自启和断线重连
简单判断:
Win11 访问 VPS 侧服务:用 ssh -LVPS 访问 Win11 侧服务:用 ssh -R长期管理多个内网服务:frp 更方便
如果只是少量 TCP 端口,SSH 隧道已经足够。它的优势是简单、内置、加密、配置量少。
14. 安全注意事项
端口转发解决的是“能不能连通”的问题,不等于服务本身安全。
尤其是以下写法:
ssh -N -R 0.0.0.0:9000:127.0.0.1:3000 user@VPS公网IP
这表示 VPS 的公网 9000 端口会转发到 Win11 的 3000 端口。如果 VPS 防火墙和安全组也放行了该端口,那么公网用户就可能访问到 Win11 上的服务。
不要随意暴露:
RDP数据库RedisNAS 管理后台路由器后台设备控制端口没有认证的 Web 管理页面
建议:
优先绑定 127.0.0.1只有确实需要公网访问时才绑定 0.0.0.0使用 VPS 防火墙限制来源 IP服务本身启用认证敏感服务不要直接暴露公网定期检查 VPS 上的监听端口
检查 VPS 正在监听的 TCP 端口:
ss -lntp
15. 常用命令汇总
Win11 访问 VPS 上的本地服务:
ssh -N -L 127.0.0.1:18080:127.0.0.1:8080 user@VPS公网IP
Win11 访问 VPS 内网服务:
ssh -N -L 127.0.0.1:18080:10.0.0.25:80 user@VPS公网IP
VPS 访问 Win11 本机服务:
ssh -N -R 127.0.0.1:9000:127.0.0.1:3000 user@VPS公网IP
公网访问 Win11 本机服务:
ssh -N -R 0.0.0.0:9000:127.0.0.1:3000 user@VPS公网IP
VPS SSH 服务端配置:
AllowTcpForwarding yesGatewayPorts clientspecified
检查 VPS 监听端口:
ss -lntp | grep 9000
Win11 测试端口:
Test-NetConnection VPS公网IP -Port 9000
16. 总结
Win11 使用 SSH 连接 VPS 后,可以直接利用 SSH 隧道完成 TCP 端口转发。
核心记住两条:
-L:Win11 本机开端口,用来访问 VPS 侧服务。-R:VPS 上开端口,用来访问 Win11 侧服务。
如果只是自己访问 VPS 上的内部服务,用 ssh -L。
如果要让 VPS 访问 Win11 本机或 Win11 内网中的服务,用 ssh -R。
如果要让公网访问 Win11 侧服务,需要额外配置:
GatewayPorts clientspecified
并在命令中指定:
-R 0.0.0.0:端口:目标地址:目标端口
但公网开放端口要谨慎。SSH 隧道能提供加密连接和端口转发能力,但不能替代服务认证、防火墙和访问控制。