最近在折腾 Google Cloud Platform (GCP) 的 VPS 时,遇到了一个颇为棘手的新问题。当我满怀期待地创建了最新的 Ubuntu 26.04 实例后,却发现那个平时最省心的“在浏览器中打开”功能的 SSH 连接竟然罢工了。以前点一下就能进的控制台,现在只留下一脸冷漠的报错提示。

GCP SSH 连接失败报错界面示例

网页 SSH 连接失败时常见的报错提示

如果你也正盯着屏幕上“连接失败”或者“授权被拒绝”的字样发愁,别慌,这不一定是你的操作问题。作为一个过来人,今天我就把针对这个特定版本的排查思路和解决方案掰开了揉碎了说说。

核心矛盾:新旧版本的磨合阵痛?

首先要明确一个概念:GCP 自带的那个网页版 SSH(也就是基于 Google Identity-Aware Proxy 的那一套工具),主要是依赖 VPS 内部的 google-guest-agent 以及相关的 SSH 配置来工作的。

GCP 元数据 SSH 密钥配置界面

在 GCP 控制台中手动添加 SSH 公钥的位置

Ubuntu 26.04 作为一个非常新的版本,虽然内核和系统库都升级了,但内部的某些守护进程配置可能会出现“水土不服”。特别是 GCP 的某些官方镜像如果还没来得及针对性优化,就会出现 Guest Agent 无法正确写入 SSH 密钥,或者权限配置异常的情况,导致网页端无法通过元数据服务验证身份。

GCP 串行控制台连接示意图

通过串行控制台连接到 VPS 的界面选项

解决方案一:从根源修复 Guest Agent(推荐)

既然问题出在系统内部的代理服务上,那我们就得想办法让它“醒过来”。如果还能通过其他方式(比如串行控制台 Serial Console)或者通过 GCloud 命令行工具勉强连进去,可以尝试以下步骤:

  1. 重启 Guest Agent:有时候服务只是卡死了。

    sudo systemctl restart google-guest-agent
    sudo systemctl status google-guest-agent
    

    查看状态确认是否正常运行,如果没有报错,稍等片刻再去网页端重试 SSH 连接。

  2. 检查 SSH 配置文件:新版本的 OpenSSH 可能默认更严格了。打开 /etc/ssh/sshd_config,确保以下配置没有被禁用或过度限制:

    PasswordAuthentication no
    PubkeyAuthentication yes
    

    GCP 的网页 SSH 是通过注入临时公钥来实现登录的,如果 PubkeyAuthentication 被关了,那就肯定连不上。修改完后记得重启 SSHD:

    sudo systemctl restart sshd
    
  3. 手动触发元数据刷新: 强制让实例重新从 GCP 获取一次账户信息。

    curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/
    

    这一步有助于确认 VPS 与元数据服务器之间的通信是否通畅。

解决方案二:绕过网页端,使用原味 SSH(最稳)

说实话,网页版 SSH 虽然方便,但在排错和粘贴代码上体验远不如终端工具。既然网页端出 BUG,我们不如绕过它,直接通过本地终端连接。

  1. 创建 SSH 密钥对:在你的本地电脑上生成一把新钥匙(Windows 用 PowerShell 或 Git Bash,Mac/Linux 用 Terminal):

    ssh-keygen -t rsa -f ~/.ssh/gcp_key -C "[email protected]"
    
  2. 上传公钥

    • 方法 A(推荐):生成后把 .pub 结尾的公钥内容复制出来,去 GCP 控制台 -> 计算引擎 -> 元数据 -> SSH 密钥,把你刚才的公钥粘贴进去,保存。
    • 方法 B(临时):如果你还能用串行控制台登录,直接把公钥追加到 VPS 的 ~/.ssh/authorized_keys 文件里。
  3. 本地连接:现在你可以直接用工具连了,不受网页 BUG 影响。

    ssh -i ~/.ssh/gcp_key your_username@你的外网IP
    

解决方案三:最后的救命稻草——串行控制台

如果你既连不上网页 SSH,也没上传本地公钥,那“串行控制台”就是最后的救命稻草。

  • 在 GCP 实例列表页面,点击你机器名称旁边的 (R)SSH 按钮旁边的箭头,选择“打开串行控制台”。
  • 这不需要网络层面的 SSH 协议,而是模拟显示器和键盘连接。
  • 如果串行端口也被禁用了,你需要先在实例详情里修改“启用串行端口”为开启,然后重启机器。

连进去之后,就可以按照“解决方案一”里的步骤修复 Guest Agent 或者手动配置 SSH 密钥了。

总结与建议

Ubuntu 26.04 毕竟太新了,作为生产环境稍显激进。遇到这种 GCP 原生工具适配滞后的问题,最稳妥的做法永远是:不要把鸡蛋放在一个篮子里

建议大家养成习惯:无论网页 SSH 多方便,创建实例的第一时间,先把自己的本地公钥配置好。这样哪怕网页端炸了,你的服务器依然牢牢掌握在自己手中。希望这篇排查日志能帮大家节省宝贵的摸鱼时间!

标签: none

评论已关闭