基于元数据的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认证失败。
解决步骤
检查并处理冲突组
首先确认系统中是否存在与用户名同名的组:getent group admin根据实际情况选择处理方式:
- 若该组无实际用途,直接删除:
sudo groupdel admin - 若需要保留该组,修改实例元数据中的SSH密钥用户名,避免与现有组名重复。
- 若该组无实际用途,直接删除:
重启Guest Agent服务
重启服务以触发用户和密钥的重新同步:sudo systemctl restart google-guest-agent.service验证同步结果
- 检查用户是否创建成功:
id admin - 确认
authorized_keys文件已填充密钥:cat /home/admin/.ssh/authorized_keys
- 检查用户是否创建成功:
重新尝试SSH连接
完成上述步骤后,再次使用元数据密钥连接虚拟机,验证认证是否成功。
额外排查点
- 确认Google Guest Agent服务处于运行状态:
sudo systemctl status google-guest-agent.service - 检查实例元数据中的SSH密钥格式是否正确(格式为
用户名:公钥内容,无多余空格或换行) - 确保虚拟机所在的防火墙规则允许SSH流量(默认TCP端口22)
内容的提问来源于stack exchange,提问作者Greg Bray
相关产品推荐
相关产品推荐

