GCP Debian10实例执行apt update后启动脚本失效、Web SSH无法连接问题问询
根因分析
- 核心触发点为
git-all安装包的依赖冲突:git-all是git的全量依赖元包,会安装所有git相关的推荐依赖、工具和文档。在Debian 10 buster的GCP官方镜像中,预装的google-compute-engine-guest-agent、google-compute-engine-oslogin等GCP Guest Environment核心包,和git-all的部分依赖存在版本冲突,apt执行git-all安装时会自动卸载这些GCP必备组件。- 首次启动时Guest Agent尚未被卸载,因此可以正常读取元数据服务中的启动脚本配置完成执行,安装
git-all过程中Guest Environment组件被卸载,因此重启后相关功能全部失效 - Guest Agent被卸载后,实例无法访问元数据服务读取
startup-script-url配置,不会执行启动脚本,也无法上报日志到Cloud Logging - OSLogin组件被卸载后,GCP Web SSH无法临时注入登录密钥,导致Web控制台SSH连接失败
- 首次启动时Guest Agent尚未被卸载,因此可以正常读取元数据服务中的启动脚本配置完成执行,安装
- 日志异常的说明:
- 你执行的
/var/log/dmesg是日志文件路径,不是可执行命令,正确的内核日志查询命令为dmesg - Debian 10默认journald为临时存储模式,重启后日志会自动清空,加上Guest Agent被卸载后日志上报链路被破坏,因此无法查到启动相关日志
- 你执行的
修复方案
现有异常实例恢复
如果仍可通过本地存储的密钥对SSH登录实例,执行以下操作恢复GCP核心组件:
# 更新包索引 sudo apt update # 重新安装GCP Guest Environment全量组件 sudo apt install -y google-compute-engine google-compute-engine-guest-agent google-compute-engine-oslogin # 启用并启动Guest Agent服务 sudo systemctl enable --now google-guest-agent.service # 验证服务运行状态 sudo systemctl status google-guest-agent.service
操作完成后重启实例,即可恢复启动脚本执行、Web SSH连接、日志上报功能。
永久规避方案
方案1(推荐):替换安装包
不要使用git-all元包,改为安装标准git包,可满足绝大多数使用场景且不会触发依赖冲突,修改启动脚本如下:
#!/bin/bash if ! command -v git &> /dev/null then echo "============================================" echo "GIT WAS NOT FOUND. INSTALLING NOW" sudo apt -y update # 替换git-all为标准git包 sudo apt install -y git echo "============================================" fi echo "CONTINUE TO DO MORE HERE"
方案2:保留全量git功能
如果确实需要git-all的全量功能,安装时显式指定保留GCP核心组件即可:
sudo apt install -y git-all google-compute-engine google-compute-engine-guest-agent google-compute-engine-oslogin
内容的提问来源于stack exchange,提问作者njho
相关产品推荐
相关产品推荐

