ngrok 适合临时访问没有公网 IP、位于 NAT 后面的 Mac、Linux 或 Windows 主机。它会创建一个公网 TCP endpoint,并把流量转发到本机 SSH 的 22 端口。
只在需要时使用 ngrok。TCP endpoint 是公网入口,请使用强密码或 SSH Key,并在用完后关闭 tunnel。
准备条件
- 本机 SSH 已经可以在局域网内连接。
- 这台主机已安装 ngrok agent。
- ngrok 账号已有 authtoken。
- 当前账号可以使用 TCP endpoints。ngrok 文档说明 free plan 使用 TCP endpoints 需要添加有效付款方式。
安装并登录
macOS:
brew install ngrok
ngrok config add-authtoken YOUR_NGROK_AUTHTOKEN
Windows 可以从官网下载 ngrok,或使用包管理器安装,然后在 PowerShell 中执行同样的 authtoken 命令:
ngrok config add-authtoken YOUR_NGROK_AUTHTOKEN
启动 SSH 转发
在要被访问的主机上执行:
ngrok tcp 22
ngrok 会输出类似这样的 forwarding 地址:
Forwarding tcp://0.tcp.ngrok.io:12345 -> localhost:22
在 Redock 里需要把它拆成 Host 和 Port:
Host: 0.tcp.ngrok.io
Port: 12345
Username: your-host-username
Connection Mode: SSH
Auth: SSH Key
Host 字段不要包含 tcp://。
保持地址稳定
随机 TCP endpoint 每次启动都可能变化。如果你需要稳定地址,可以在 ngrok Dashboard 创建 TCP Address,然后使用分配到的 host 和 port 启动 tunnel。
ngrok tcp 22 --url tcp://1.tcp.eu.ngrok.io:12345
具体 hostname 和 port 由 ngrok 分配,不能任意选择。
安全建议
- 优先使用 SSH Key。
- 限制远程主机允许登录的 SSH 用户。
- 会话结束后关闭 ngrok。
- 不要通过 ngrok 暴露弱密码 SSH。
- 日常私有访问优先使用 Tailscale,而不是公网 TCP endpoint。
- Mosh 不能通过简单的 ngrok TCP SSH tunnel 工作,因为 Mosh 在 SSH bootstrap 后会切换到 UDP。
常见问题
- Redock 无法连接:确认 ngrok 仍在运行,并且 Host/Port 与最新 forwarding 地址一致。
- Authentication failed:ngrok 转发已经通了,但 SSH 用户名、密码或 key 错了。
- 地址变化:更新 Redock Host,或者使用 reserved TCP Address。
ngrok tcp 22被拒绝:检查 ngrok Dashboard 中的账号套餐、账单和 TCP endpoint 可用性。