Win11 使用 SSH 隧道连接 VPS:端口转发、反向隧道与安全注意事项

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 隧道能提供加密连接和端口转发能力,但不能替代服务认证、防火墙和访问控制。