谷歌云 Compute Engine 浏览器 SSH 连不上:防火墙、OS Login、密钥
谷歌云 Compute Engine 的「浏览器打开 SSH」平时最省事,一旦连不上,报错又往往只有一句「连接失败,请重试」,很容易让人无从下手。其实这类问题基本可以按层拆开:实例状态、网络放行、磁盘与系统、登录方式、客户端排查。下面按从外到内的顺序讲一遍,照着走通常能定位到原因。
排查顺序:从实例到本机
1. 先确认实例本身在正常运行
打开 Compute Engine 的虚拟机实例列表,看实例状态是不是绿色的运行中。重点看两件事:
- 是不是被抢占式实例回收了。抢占实例随时可能被终止,终止后浏览器 SSH 自然连不上,需要重新启动或改用标准实例。
- 是不是因为欠费或配额问题被停止。账号余额不足时实例会被关停,控制台里通常有提示。
如果实例已经停止,先启动它,再等 1~2 分钟让系统完成引导,然后重试浏览器 SSH。创建实例的完整步骤可以参考开机教程,选区的思路可以看亚太区域选择。
2. 检查防火墙是否放行 22 端口
浏览器 SSH 走的是 Google 的中转,但流量最终仍要落到实例的 22 端口上。如果防火墙没有放行,浏览器一样会失败。
在 VPC 网络的防火墙规则里确认:
- 有没有一条允许
tcp:22的入站规则; - 这条规则的目标是否覆盖了当前实例(按网络标签或服务账号匹配);
- 规则的来源范围是否包含你实际使用的入口。
如果走 IAP 隧道连接,来源要放行 35.235.240.0/20,这是 Google IAP 的固定网段。防火墙规则的写法可以对照防火墙规则说明。
3. 磁盘写满会让 SSH 直接失效
这是最容易被忽略的一层。系统盘 100% 占满时,SSH 守护进程无法写入必要的文件(比如会话记录、临时文件),表现就是浏览器 SSH 一直失败,但实例状态显示正常。
判断方法:用串口控制台(Serial Console)登录,执行 df -h 看根分区使用率。如果确实是满的,清理日志、临时文件或扩容磁盘后再试。
4. OS Login 与元数据密钥不要混用
GCP 有两种登录方式:
| 方式 | 密钥来源 | 适用场景 |
|---|---|---|
| 元数据 SSH 密钥 | 项目或实例的元数据里存公钥 | 小团队、固定人员 |
| OS Login | 绑定 Google 账号,IAM 统一管理 | 人员多、需要审计 |
两者同时开启时容易互相干扰,出现「密钥明明加了却连不上」。建议团队统一选一种:要么全部用 OS Login,要么全部用元数据密钥。切换后记得重新生成或重新导入密钥,并确认对应账号在实例上有登录权限。
5. 在本机用 gcloud 看原始错误
浏览器只给一句笼统提示,本机命令行能看到更具体的原因。执行:
gcloud compute ssh 实例名 --zone=区域
常见输出对应的问题:
Permission denied (publickey):密钥不匹配,或 OS Login 未生效;Connection timed out:防火墙没放行,或实例网络不通;Connection refused:22 端口没有服务在监听,SSH 守护进程可能没起来。
拿到具体报错后,再回到上面几层对应处理,效率会高很多。
常见问题
规则已放行但端口仍不通,先查什么?
按顺序核对:云厂商安全组/轻量防火墙是否入站放行、是否绑到正确实例、系统内防火墙或服务是否监听、本机是否只监听 127.0.0.1,以及源地址是否被限制为特定网段。
80/443 应该对哪些网段开放?
对外提供 Web 服务时通常放行 0.0.0.0/0 的 TCP 80/443;管理端口(如 22、3389、8888)应限制为运维出口 IP,避免把管理面暴露到公网。