无法通过SSH连接Google Cloud Engine实例且存在启动报错如何处理
根因说明
实例依赖的google-compute-engine==2.8.13 Python包缺失/版本不兼容,导致GCP平台配套的所有系统服务(负责SSH密钥同步、元数据脚本执行、实例网络配置等)启动失败,因此你添加的SSH密钥、启动脚本创建用户的操作都没有被实例执行,SSH自然无法连接。
无需登录实例的修复方案
方案一:启动脚本自动修复(优先使用)
你的启动脚本之前未生效,是因为负责执行元数据脚本的google_metadata_script_runner服务异常,未读取到你配置的脚本,本方案会先强制重装GCP guest配套包恢复服务:
- 停止故障实例
- 编辑实例配置,在自定义元数据板块新增一个键为
startup-script的项,值根据你的实例操作系统选择对应脚本:
Debian/Ubuntu 系列实例脚本
#!/bin/bash apt update apt install -y --reinstall python3-google-compute-engine google-compute-engine-oslogin google-compute-engine systemctl restart google-instance-setup google-accounts-daemon google-network-daemon google-metadata-script-runner
CentOS/RHEL/Fedora 系列实例脚本
#!/bin/bash yum install -y --reinstall python3-google-compute-engine google-compute-engine-oslogin google-compute-engine systemctl restart google-instance-setup google-accounts-daemon google-network-daemon google-metadata-script-runner
- 保存实例配置后重新启动实例,等待3-5分钟待服务恢复后,即可正常通过SSH连接。
方案二:挂载磁盘修复(方案一失效时使用)
如果方案一执行后仍未恢复,可通过挂载故障盘到正常实例的方式修复:
- 停止故障实例,在磁盘列表中找到该实例的系统启动盘,卸载该磁盘
- 新建一个和故障实例同操作系统版本的临时正常实例,将刚才卸载的故障盘作为数据盘挂载到临时实例
- 登录临时实例,执行以下操作:
# 查看磁盘分区名,通常为/dev/sdb1 fdisk -l # 挂载系统分区 mount /dev/sdb1 /mnt # 挂载系统运行所需目录 mount -o bind /proc /mnt/proc mount -o bind /sys /mnt/sys mount -o bind /dev /mnt/dev # 进入故障盘系统环境 chroot /mnt
- 在chroot环境中执行方案一对应操作系统的重装GCP配套包命令,执行完成后退出chroot:
exit # 卸载所有挂载的目录 umount /mnt/dev umount /mnt/sys umount /mnt/proc umount /mnt
- 停止临时实例,卸载故障盘,将故障盘重新挂载回原故障实例作为系统启动盘,启动原实例即可正常连接。
内容的提问来源于stack exchange,提问作者knotmine
相关产品推荐
相关产品推荐

