通过GCP服务器与SSH隧道暴露树莓派上的Jupyter与Flask API服务
问题根因
你遇到的问题由三个常见配置错误导致:
- SSH服务默认限制反向隧道端口仅绑定服务器本地回环地址(127.0.0.1),无法被公网直接访问
- GCP防火墙开放的是UDP端口,但SSH隧道走TCP协议,端口规则不匹配
- 树莓派的反向隧道命令写错了Jupyter端口,多写了一个8导致映射错误
修复步骤
1. 调整GCP防火墙规则
删除原有7003、7004的UDP入站规则,新增对应端口的TCP入站规则,允许来源IP访问(如果追求安全可以仅允许你常用的公网IP段,无需开放0.0.0.0/0)。
2. 修改GCP服务器SSH配置
登录GCP服务器,编辑SSH配置文件:
sudo nano /etc/ssh/sshd_config
找到GatewayPorts参数,取消注释并修改为:
GatewayPorts yes
保存退出后重启SSH服务使配置生效:
sudo systemctl restart sshd
该配置允许反向隧道端口绑定到服务器的公网网卡,对外提供访问。
3. 修正树莓派的反向隧道命令
替换你原来的隧道命令,修正端口错误并显式指定绑定所有网卡:
ssh -NR 0.0.0.0:7003:localhost:5000 -R 0.0.0.0:7004:localhost:8888 user@gcp.static.ip
4. 验证访问
配置完成后,无需在本地设备建立额外隧道,直接通过以下地址访问服务:
- Flask API:
http://gcp.static.ip:7003 - Jupyter:
http://gcp.static.ip:7004
可选稳定性优化
如果遇到SSH隧道偶尔断线的问题,可以用autossh做自动重连保活,示例命令如下:
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NR 0.0.0.0:7003:localhost:5000 -R 0.0.0.0:7004:localhost:8888 user@gcp.static.ip
也可以将该命令配置为树莓派的systemd服务,实现开机自动启动、断线自动重启。
内容的提问来源于stack exchange,提问作者fuchini
相关产品推荐
相关产品推荐

