KG-Tunnel 使用教程
让没有公网 IP 的 Windows 电脑,也能被人远程连上桌面。 借助一台有公网 IP 的 Linux 服务器做中转,两端都主动连它,数据经它转发, 被控端不需要开放任何入站端口。
1.它是什么
先看一张图,理解数据怎么走:
- 被控端(要被远程的 Windows):主动连跳板机,建立反向隧道,把跳板机上的一个端口(例如 13389)映射到自己的远程桌面 3389。
- 主控端(你手上的电脑):主动连跳板机,建立正向隧道,把本机端口映射到跳板机那个端口。
- 你最后用 Windows 自带的「远程桌面」(mstsc)连本机
127.0.0.1:本地端口,就到达被控端的桌面了。
2.使用前准备
① 被控端电脑已开启 Windows 远程桌面。
② 你有一台带 SSH 的公网服务器(跳板机),Linux 系统,能通过 SSH 登录。
2.1 被控端开启远程桌面
在被控端电脑上:
- 打开「设置」→「系统」→「远程桌面」
- 打开「启用远程桌面」开关
2.2 准备一台公网服务器
你需要一台有公网 IP 的 Linux 服务器(阿里云、腾讯云、Vultr、搬瓦工都行), SSH 能登录即可,配置要求很低(1 核 1G 就够)。
服务器需要满足:
- SSH 能登录(默认 22 端口,或你自定义的端口)
- 允许 TCP 端口转发(sshd 默认允许,不用改)
GatewayPorts no 正是我们想要的
—— 反向隧道只绑本机 127.0.0.1,不暴露公网。
3.跳板机配置(可选,但建议做)
如果你的跳板机是全新的,默认配置就能用。但为了安全,建议做下面两件事:
3.1 创建专用 SSH 用户
在跳板机上:
sudo useradd -m -s /usr/sbin/nologin kgtunnel
sudo passwd kgtunnel
# 按提示设一个密码
-s /usr/sbin/nologin 表示这个用户不能登录 shell,只能用来做端口转发。
3.2 限制这个用户的权限(更安全)
编辑 /etc/ssh/sshd_config,在文件末尾加:
Match User kgtunnel
AllowTcpForwarding remote
PermitOpen none
PermitTTY no
ForceCommand /usr/sbin/nologin
改完重启 sshd:
sudo systemctl restart sshd
# 或者
sudo service sshd restart
4.被控端使用
被控端是「要被远程」的 Windows 电脑,没有公网 IP。 它运行 KG-Tunnel 被控端程序,主动连跳板机,建立反向隧道。
4.1 填写参数
| 字段 | 填什么 | 说明 |
|---|---|---|
| 本地 IP | localhost | 一般不用改 |
| 远程桌面端口 | 3389 | Windows 默认 3389,没改过就填这个 |
| 本地远程数据传输端口 | 比如 13389 | 跳板机上的中转端口,建议 30000~40000。记住这个值,主控端要用。 |
| 跳板机 IP | 你的公网 IP | 服务器的公网 IP |
| SSH 端口 | 22 | 服务器 SSH 端口,没改过就是 22 |
| 用户名 | 服务器的 SSH 用户名 | 比如 root 或 kgtunnel |
| 密码 | 服务器 SSH 密码 | 和下面的私钥二选一 |
| 私钥(非必要) | 留空 | 如果用密钥登录再填,见第 8 节 |
4.2 启动隧道
- 点「启动隧道」按钮
- 下方状态灯变绿,显示「✅ 隧道已建立」
- 日志框显示类似:
反向隧道已建立: 跳板机 127.0.0.1:13389 -> 本机 localhost:3389
5.主控端使用
主控端是你用来远程别人的电脑。它主动连跳板机,建立正向隧道, 然后你就能用 mstsc 连过去了。
5.1 填写参数
| 字段 | 填什么 | 说明 |
|---|---|---|
| 本地监听端口 | 比如 13389 | 本机端口,随便填,没被占用就行 |
| 跳板机目标地址 | 127.0.0.1 | 一般不用改 |
| 跳板机目标端口 | 和被控端一致 | 必须等于被控端的「本地远程数据传输端口」 |
| 跳板机 IP / SSH 端口 / 用户名 / 密码 | 和被控端一样 | 连同一台服务器,填一样的 |
5.2 启动隧道
- 点「启动隧道」
- 状态灯变绿,日志显示:
正向隧道已建立: 本机 127.0.0.1:13389 -> 跳板机 127.0.0.1:13389
5.3 打开远程桌面
隧道建立后,点「打开远程桌面」按钮。
Windows 会自动弹出「远程桌面连接」窗口,并在地址栏填好 127.0.0.1:13389。
点「连接」,输入被控端 Windows 的登录用户名和密码 (注意:是被控端 Windows 的账号密码,不是你服务器 SSH 的密码)。
6.帮助与打赏
软件里的「帮助」页有使用说明、端口对应关系和打赏入口。
如果这个工具帮你少踩了几个坑,欢迎扫码请我吃碗面。打赏完全自愿,不打赏也照样用。
7.无人值守:开机自动启动
7.1 配置被控端电脑自动登录
被控端电脑必须保持登录状态,远程桌面端口才会监听。先配置自动登录:
- 按
Win + R,输入netplwiz,回车 - 选中你平时用的账户
- 取消勾选「要使用本计算机,用户必须输入用户名和密码」
- 点「应用」,输入该账户的密码两次,确定
7.2 配置 KG-Tunnel 开机自启
在被控端 KG-Tunnel 界面里:
- 勾选「记住我的输入」
- 勾选「开机自动启动隧道」
- 点「启动隧道」,确认能连
- 关掉程序
8.用密钥登录(推荐,可无人值守)
密码不会保存。如果你想要无人值守自动建隧道,需要用密钥登录。
8.1 在被控端电脑生成密钥
在被控端电脑上打开 PowerShell:
ssh-keygen -t ed25519 -f $env:USERPROFILE\.ssh\kg_tunnel
一路回车(密码短语留空)。会生成两个文件:
C:\Users\你的用户名\.ssh\kg_tunnel(私钥)C:\Users\你的用户名\.ssh\kg_tunnel.pub(公钥)
8.2 把公钥传到跳板机
type $env:USERPROFILE\.ssh\kg_tunnel.pub | ssh -p 22 你的用户名@跳板机IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
把 22、你的用户名、跳板机IP 换成你的。会提示输入一次密码。
8.3 测试免密登录
ssh -p 22 -i $env:USERPROFILE\.ssh\kg_tunnel 你的用户名@跳板机IP
不输密码能进服务器 → 成功。输入 exit 退出。
8.4 在 KG-Tunnel 里配置
- 密码栏:留空
- 私钥栏:填
C:\Users\你的用户名\.ssh\kg_tunnel
之后再配合第 7 节的开机自启,就能无人值守自动建隧道了。
9.常见问题 FAQ
Q1:连不上跳板机怎么办?
- 在被控端电脑上手动测:
ssh -p 端口 用户名@跳板机IP,能不能进? - 能进说明网络和凭据没问题,是 KG-Tunnel 参数错
- 不能进说明是网络或服务器问题,先解决 SSH 本身
- 看软件里的日志框,会有具体的错误信息
Q2:密码和私钥到底填哪个?
二选一。填了密码就不用选私钥;选了私钥密码栏就留空。
Q3:本地端口冲突怎么办?
改一个端口,建议 30000~40000 之间的数字。主控端的「本地监听端口」和被控端的「本地远程数据传输端口」都要改,且保持一致。
Q4:被控端必须有人登录吗?
是的。锁屏可以,注销 / 关机不行。原因:Windows 远程桌面服务只在用户登录后才监听 3389 端口。建议配置自动登录(见第 7 节)。
Q5:能连上跳板机,但远程桌面连不上?
- 被控端是否点了「启动隧道」,状态是否绿
- 主控端「跳板机目标端口」是否等于被控端「本地远程数据传输端口」
- 被控端 Windows 是否已开启远程桌面
- 被控端是否处于已登录状态
Q6:跳板机 sshd 要改什么配置?
什么都不用改。默认配置就满足。特别要注意 GatewayPorts 保持 no(默认值),这是安全关键。
Q7:数据安全吗?
整个链路是 SSH 加密的。跳板机只做端口转发,不存储任何数据。建议用自己控制的服务器。
10.安全建议
- 不要用 root 账号做隧道,创建一个专用用户(见 3.1)
- 保持
GatewayPorts no,不要改成 yes - 私钥文件不要泄露
- 定期换 SSH 密码 / 密钥
- 跳板机建议只做隧道专用,不要跑其他服务
11.反馈
如果有问题或建议,欢迎通过网站公众号私信联系。
扫码关注公众号 · 私信反馈
最后更新:2026 年 9 月