You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

~/.ssh/authorized_keys与谷歌云项目/实例级元数据有何关联?

GCP Compute Engine SSH 登录异常原因说明

核心原因

你遇到的问题是由 Google Compute Engine 实例默认运行的 Guest Agent 服务的同步规则和gcloud compute ssh的执行逻辑共同导致的:

  • Guest Agent 负责同步项目/实例元数据到本地系统配置,SSH 密钥的同步默认是单向全量覆盖逻辑:只会用元数据中存储的公钥列表覆盖本地~/.ssh/authorized_keys文件,不会把本地文件的修改反向同步到元数据。
  • 为了避免覆盖用户的自定义配置,Guest Agent 检测到authorized_keys被手动修改后,会暂时停止该文件的自动同步,直到元数据中的 SSH 密钥列表发生更新,才会重新用元数据内容覆盖本地文件。
  • gcloud compute ssh执行时会先校验本地的google_compute_engine.pub是否已经存在于项目/实例元数据中:如果已存在则不会重复推送,直接用对应的私钥发起SSH登录请求。

场景复现逻辑

  1. 初始状态下元数据存储了你的公钥,Guest Agent 正常同步到authorized_keys,你可以正常登录
  2. 你手动删除了authorized_keys中的对应公钥条目,Guest Agent 检测到文件被修改,停止同步
  3. 退出SSH会话后重新登录时,本地authorized_keys已经没有对应公钥,因此登录失败;此时gcloud compute ssh检测到元数据中已有你的公钥,不会重新推送,也无法登录
  4. 你在控制台删除元数据中的对应条目后,gcloud compute ssh检测到元数据中没有你的公钥,会重新把google_compute_engine.pub上传到元数据;Guest Agent 检测到元数据SSH密钥更新,会用最新的元数据内容覆盖你手动修改过的authorized_keys,登录恢复正常。

实例级元数据的适配说明

上述所有逻辑完全适用于实例级元数据:

  • Guest Agent 同步SSH密钥的优先级为:如果实例级元数据配置了block-project-ssh-keys = true,则仅同步实例级存储的SSH密钥;否则会合并项目级、实例级的所有SSH密钥同步到本地。
  • 手动修改本地authorized_keys触发的同步锁定规则、gcloud compute ssh的公钥校验推送规则,对实例级元数据和项目级元数据完全一致。

注意事项

如果需要自定义authorized_keys的内容,不要直接修改本地文件,可通过以下两种方式操作:

  • 在控制台修改对应项目/实例的元数据SSH密钥列表,配置会自动同步到所有关联实例
  • 修改Guest Agent的配置文件,关闭SSH密钥自动同步功能,之后可自由编辑本地authorized_keys文件

内容的提问来源于stack exchange,提问作者Han Qi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:15:00