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

升级custom-1-2816后无法通过浏览器SSH连接Google VM如何排查

问题现象
  • 将Google Compute Engine实例升级至custom-1-2816规格后,无法通过控制台浏览器SSH功能连接实例
  • 调用平台官方故障排查工具检测,未返回任何错误结果
  • 本地SSH客户端、Google Cloud Shell连接该实例时均返回报错:
Permission denied (publickey).  ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
  • 同账号下其他GCE实例的浏览器SSH、Cloud Shell连接均正常,可排除账号权限、全局网络、本地客户端配置类问题
根因定位

该问题为自定义规格调整后的常见故障,核心原因是实例规格变更重启后,guest环境未正常完成SSH公钥同步,或系统内SSH相关文件权限异常、根目录磁盘占满导致sshd服务无法读取公钥授权文件,和VPC防火墙、平台侧管控配置无关。

解决步骤
  1. 确认实例启动状态
    打开实例的串行端口控制台日志,确认系统完成全量启动,没有卡在文件系统校验、内核panic、磁盘挂载失败这类启动故障。日志中出现系统登录提示符即代表实例核心运行状态正常。
  2. 临时关闭OS Login验证
    进入实例详情页的元数据配置项,检查是否存在enable-oslogin=TRUE配置,若存在临时将值改为FALSE,等待60秒后重试连接。自定义规格实例启动时内存资源初始化耗时更长,很容易出现guest agent拉取OS Login公钥超时,导致公钥未写入授权文件的问题。
  3. 通过启动脚本修复SSH权限
    注意:停止实例前确认实例本地没有未持久化的临时数据,实例本地SSD盘的数据在停止后会被清空
    若关闭OS Login后仍报错,按以下操作修复:
    • 停止目标实例,不要删除实例挂载的系统盘和数据盘
    • 在实例自定义元数据中添加键为startup-script的条目,内容为:
    #!/bin/bash
    # 修正SSH目录及授权文件权限
    chmod 700 /home/*/.ssh
    chmod 600 /home/*/.ssh/authorized_keys
    for user_home in /home/*; do
      username=$(basename $user_home)
      chown -R $username:$username $user_home/.ssh
    done
    # 重启SSH服务
    if systemctl list-unit-files | grep -q sshd.service; then
      systemctl restart sshd
    else
      systemctl restart ssh
    fi
    # 输出根目录使用率到日志,方便排查磁盘满问题
    df -h / > /var/tmp/root_disk_usage.log
    
    • 启动实例,等待2分钟让启动脚本执行完成,再次尝试SSH连接。连接成功后务必删除刚才添加的startup-script元数据条目,避免后续重启重复执行。
  4. 救援模式排查深层问题
    如果上述操作都无效,关闭实例后卸载系统盘,将其作为数据盘挂载到同可用区的一台正常GCE实例上,挂载后逐次检查:
    • 磁盘根目录剩余空间,若使用率100%先清理冗余日志、无用文件
    • 磁盘内/etc/ssh/sshd_config配置,确认PubkeyAuthentication yes配置未被注释,AuthorizedKeysFile路径为默认值
    • 检查磁盘内/home/<你的登录用户名>/.ssh/authorized_keys文件内容,确认连接使用的公钥已写入文件
      检查完成后将磁盘卸载,重新作为系统盘挂回原实例启动即可。

内容的提问来源于stack exchange,提问作者Rohith Kodiyath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:33:22