SSH双向隧道,无需安装任何软件,从公司连接家里没有公网IP的电脑的远程桌面。
前提:有一台公网小鸡做为跳板
该方案的逻辑是:家里向 VPS 推送流量,公司从 VPS 拉取流量。 VPS 仅作为内部转接点,不向公网暴露 RDP 端口。
第一阶段:VPS 服务端配置
在你的公网服务器上进行以下操作,确保转发功能开启且连接稳定。
编辑配置文件:sudo nano /etc/ssh/sshd_config
确认/修改以下参数:
Bash
# 允许流量转发(核心)
AllowTcpForwarding yes
# 保持长连接(服务端主动探测客户端,防止超时掉线)
ClientAliveInterval 60
ClientAliveCountMax 3
# 保持默认 no(安全性最高,端口只在 VPS 内部流转)
GatewayPorts no
重启服务:sudo systemctl restart ssh
第二阶段:双向隧道指令(客户端)
请按照 “先家里,后公司” 的顺序执行以下 PowerShell/CMD 命令。
1. 家里电脑(推送端):把 3389 推到 VPS
PowerShell/CMD
ssh -o ServerAliveInterval=30 -N -R 33890:localhost:3389 root@VPS_IP
-o ServerAliveInterval=30: 客户端每 30 秒发一次心跳包,防止隧道因闲置断开。
-N: 告诉 SSH “只做转发”,不要打开远程命令提示符窗口(执行后窗口会保持空白并“卡住”,这是正常的)。
-R 33890:localhost:3389: 远程转发。在 VPS 上开启 33890 端口,并将发往该端口的流量转发回家里电脑的 3389。
2. 公司电脑(拉取端):把 VPS 端口拉回本地
PowerShell/CMD
ssh -o ServerAliveInterval=30 -N -L 13389:localhost:33890 root@VPS_IP
-L 13389:localhost:33890: 本地转发。在公司电脑开启 13389 端口,并将发往该端口的流量转发到 VPS 的 33890。
第三阶段:连接远程桌面
两边隧道都开启后,在公司电脑上:
按下 Win + R,输入 mstsc。
计算机处填写:127.0.0.1:13389。
点击连接,输入家里 Windows 的账号密码。
总结:端口流转逻辑
代码段
graph LR
A[公司 RDP 客户端] -- 访问 --> B(127.0.0.1:13389)
B -- SSH 本地隧道 -L --> C(VPS 内部 localhost:33890)
C -- SSH 远程隧道 -R --> D(家里电脑 localhost:3389)
D -- 交付 --> E[Windows RDP 服务]
进阶优化:免密登录(避开每次输密码)
为了让上述脚本能一键运行,建议配置 SSH Key 免密登录:
在公司/家里电脑生成密钥:ssh-keygen -t ed25519(一路回车)。
获取公钥内容:打开 C:\Users\你的用户名\.ssh\id_ed25519.pub。
上传至 VPS:将该文件内的字符串粘贴到 VPS 的 /root/.ssh/authorized_keys 中。