无公网出口的 VPS SSH 连接方案指南
无公网出口的 VPS SSH 连接方案指南
在云计算与私有云部署中,出于成本控制(如纯内网 NAT VPS)、网络环境限制(如校园网/公司内网/家庭宽带无公网 IP)或极致的安全考虑(不希望将 22 端口直接暴露在公网遭暴破),我们经常会遇到没有公网 IP(甚至没有公网出口)的 VPS。
针对这种场景,如何安全、高效地通过 SSH 远程连接并管理 VPS?本文为你盘点目前主流的五大解决方案,并提供详细的实施指南。
方案概览
| 方案分类 | 代表工具 / 技术 | 依赖条件 | 核心特点 |
|---|---|---|---|
| 即时终端共享 | sshx |
可访问 sshx.io 节点 |
开箱即用,0 配置,秒级生成 Web 共享终端 |
| 应用层 Web 终端 | ttyd + Cloudflare Tunnel |
免费 Cloudflare 账号 | 零客户端依赖,搭配身份认证打造持久化 Web Shell |
| 虚拟局域网 (SD-WAN) | Tailscale / ZeroTier / headscale | 控制平面的连接 | 体验最接近直连,设备自动组成 P2P 内网 |
| 反向穿透 (Reverse Proxy) | Frp / Rathole / SSH Reverse Tunnel | 一台带公网 IP 的中转机器 | 稳定、自建自由度高、传统穿透方案 |
| 边缘穿透 (Zero Trust) | Cloudflare Tunnel (cloudflared) |
免费 Cloudflare 账号 + 域名 | 安全性极高,无公网 IP 节点自动打通 Tunnel |
方案一:基于 WebRTC 的即时终端共享(sshx)
如果你需要最快速度连上 VPS,或者想要临时分享终端给他人协作调试,sshx 是目前最方便的轻量级无公网连接方案。
工作原理
sshx 是一个用 Rust 编写的开源轻量工具。运行后,它会自动建立与 sshx.io 官方中继节点的双向加密连接(基于 WebRTC / WebSocket),并生成一个唯一的加密控制台网址。任何人在浏览器打开该网址即可直接控制终端,且支持多人协同操作。
实施步骤
第一步:下载并运行 sshx
在无公网 IP 的 VPS 上直接运行安装与启动脚本:
1 | |
运行后,控制台会立即输出类似如下的连接信息:
1 | |
第二步:浏览器访问
复制控制台输出的链接到本地电脑或手机的浏览器中打开,即可立刻进入可交互的 Shell 界面。
第三步:作为后台持久化服务运行(可选)
如果你希望 sshx 能够常驻后台,在系统启动时自动建立链接,可以将其写成 init.d 或 systemd 服务:
1 | |
创建 /etc/init.d/sshx 服务脚本:
1 | |
赋予执行权限并启动:
1 | |
启动后查看 /var/log/sshx.log 即可获取远程访问的专属网址。
方案二:Web 终端 + Cloudflare 穿透(全自主掌控 Web Shell)
如果你希望拥有一个固定域名、支持长效密码认证的私有 Web 终端,将 ttyd 与 Cloudflare Tunnel 结合是更优雅的持久化方案。
工作原理
ttyd 在 VPS 本地将 Bash/Zsh 暴露为一个 Web 服务(如 127.0.0.1:7681),再利用 cloudflared 建立一条由内向外的加密隧道连接至 Cloudflare 边缘节点。
实施步骤
第一步:VPS 部署 ttyd
1 | |
第二步:部署 Cloudflare Tunnel
1 | |
第三步:编写统一后台管理脚本 (/etc/init.d/webterminal)
1 | |
给予权限并启动:
1 | |
直接在浏览器打开 https://ttyd.yourdomain.com 即可输入账号密码连接。
方案三:全局 overlay 虚拟网(Tailscale / ZeroTier)
如果你希望保留原汁原味的传统 SSH 终端体验(使用本地 Kitty、iTerm2、MobaXterm 等),且需要 SCP/SFTP 传输文件,Tailscale 是最佳选择。
工作原理
利用 WireGuard 加密协议建立内网 P2P 隧道。即使 VPS 无公网 IP,只要它能访问 Tailscale 控制节点,就能与你的本地电脑分配在同一个虚拟内网(如 100.x.y.z)。
实施步骤
- VPS 端安装:
1 | |
点击控制台输出的链接,登录账号完成绑定。
- 本地连接:
本地电脑同样安装 Tailscale 并登录同一账号。查看 VPS 的虚拟 IP(如 100.115.92.10)后,在本地终端直接连接:
1 | |
方案四:传统反向隧道 (Frp / SSH 反向代理)
如果你手里有另一台带有公网 IP 的中转 VPS,采用 Frp 是最经典的选择。
工作原理
无公网 IP 的内网 VPS(Frpc 客户端)主动向公网 VPS(Frps 服务端)建立长连接。当外界访问公网 VPS 的指定端口(如 2222)时,流量会被转发至内网 VPS 的 22 端口。
实施步骤
- 公网 VPS 配置
frps.toml:
1 | |
启动服务:./frps -c ./frps.toml
- 无公网 VPS 配置
frpc.toml:
1 | |
启动客户端:./frpc -c ./frpc.toml
- 本地连接:
1 | |
方案五:Cloudflare Tunnel SSH 访问 (零信任原生 SSH)
如果你不想将 SSH 端口露在外网被暴力破解,可以使用 Cloudflare 原生的 SSH Over Cloudflare Tunnel 方案。
工作原理
VPS 仅保持与 Cloudflare 的 WebSocket 隧道,本地电脑安装 cloudflared 并将其配置为 SSH 的 ProxyCommand 建立连接。
实施步骤
- VPS 端配置
config.yml:
1 | |
启动:cloudflared tunnel run my-ssh-tunnel
- 本地电脑配置
~/.ssh/config:
1 | |
- 本地直接连入:
1 | |
总结与选型建议
- 追求极致快速 / 临时共享调试:首选 方案一(sshx)。不需要域名和账号配置,一行命令生成链接,即开即用。
- 需要私有持久 Web 终端:推荐 方案二(ttyd + Cloudflare)。具备身份验证,适合从任何设备的浏览器随时登录。
- 日常运维 / 多节点管理 / SFTP 文件传输:推荐 方案三(Tailscale)。构建无感虚拟内网,体验与公网 IP 无异。
- 自建可控 / 已有公网中转机:推荐 方案四(Frp)。传统成熟,适合批量配置穿透。
- 企业级安全 / 零信任防护:推荐 方案五(Cloudflare Access SSH)。收拢所有入站端口,彻底规避暴露面。
本文由 BOSH 的博客助手 HerMes 整理 🖥️
原文链接:[本地上传]