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

基于元数据的GCE VM SSH认证失败及oslogin缓存刷新故障

GCE虚拟机基于元数据SSH密钥认证失败排查与解决

问题现象

尝试通过元数据SSH密钥连接GCE虚拟机时,出现认证失败错误:

ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

排查发现:

  • 实例元数据中已配置SSH密钥,但本地用户的authorized_keys文件为空(例如ubuntu用户的文件大小为0字节):
    # 查看元数据中的SSH密钥
    curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/ssh-keys"
    username:ssh-ed25519 AAAAC3NzaC....omitted....
    admin:ssh-ed25519 AAAAC3NzaC....omitted....
    
    # 查看本地用户的.ssh目录
    sudo ls -hal /home/ubuntu/.ssh/
    /home/ubuntu/.ssh/:
    total 8.0K
    drwx------ 2 ubuntu ubuntu 4.0K Aug 11 23:19 .
    drwxr-xr-x 3 ubuntu ubuntu 4.0K Aug 11 23:19 ..
    -rw------- 1 ubuntu ubuntu    0 Aug 11 23:19 authorized_keys
    
  • SSH认证日志显示连接用户为无效用户:
    sudo less /var/log/auth.log
    Aug 11 23:28:59 test-vm sshd[2197]: Invalid user admin from 1.2.3.4 port 34570
    Aug 11 23:28:59 test-vm sshd[2197]: Connection closed by invalid user admin 1.2.3.4 port 34570 [preauth]
    
  • Google Guest Agent服务日志报错,无法创建用户:
    sudo journalctl -u google-guest-agent.service
    Aug 11 23:19:37 test-vm GCEGuestAgent[766]: 2022-08-11T23:19:37.6541Z GCEGuestAgent Info: Creating user admin.
    Aug 11 23:19:37 test-vm useradd[885]: failed adding user 'admin', data deleted
    Aug 11 23:19:37 test-vm GCEGuestAgent[766]: 2022-08-11T23:19:37.6869Z GCEGuestAgent Error non_windows_accounts.go:144:
      Error creating user: useradd: group admin exists - if you want to add this user to that group, use -g.
    
    或出现组缓存刷新失败:
    sudo journalctl -u google-guest-agent.service
    Aug 11 22:24:42 test-vm oslogin_cache_refresh[907]: Refreshing passwd entry cache
    Aug 11 22:24:42 test-vm oslogin_cache_refresh[907]: Refreshing group entry cache
    Aug 11 22:24:42 test-vm oslogin_cache_refresh[907]: Failure getting groups, quitting
    Aug 11 22:24:42 test-vm oslogin_cache_refresh[907]: Failed to get groups, not updating group cache file, removing /etc/oslogin_group.cache.bak.
    

原因分析

Google Guest Agent负责将元数据中的SSH密钥同步到虚拟机本地用户,并生成对应的authorized_keys文件。当元数据中指定的用户名与系统中已存在的组名冲突时,useradd命令无法创建用户,导致密钥同步失败,最终SSH认证失败。

解决步骤

  1. 检查并处理冲突组
    首先确认系统中是否存在与用户名同名的组:

    getent group admin
    

    根据实际情况选择处理方式:

    • 若该组无实际用途,直接删除:
      sudo groupdel admin
      
    • 若需要保留该组,修改实例元数据中的SSH密钥用户名,避免与现有组名重复。
  2. 重启Guest Agent服务
    重启服务以触发用户和密钥的重新同步:

    sudo systemctl restart google-guest-agent.service
    
  3. 验证同步结果

    • 检查用户是否创建成功:
      id admin
      
    • 确认authorized_keys文件已填充密钥:
      cat /home/admin/.ssh/authorized_keys
      
  4. 重新尝试SSH连接
    完成上述步骤后,再次使用元数据密钥连接虚拟机,验证认证是否成功。

额外排查点

  • 确认Google Guest Agent服务处于运行状态:
    sudo systemctl status google-guest-agent.service
    
  • 检查实例元数据中的SSH密钥格式是否正确(格式为用户名:公钥内容,无多余空格或换行)
  • 确保虚拟机所在的防火墙规则允许SSH流量(默认TCP端口22)

内容的提问来源于stack exchange,提问作者Greg Bray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:33:17