GCP Compute启动脚本克隆Github私有仓库时known_hosts无法访问如何解决
问题原因
- 核心原因是GCP启动脚本的执行时机早于root用户家目录的初始化流程:/root/.ssh目录在启动脚本运行时还未被系统自动创建,直接写入/root/.ssh/known_hosts会因为上层目录不存在报错,并非root用户没有写入权限。你手动SSH登录机器时,系统已经完成了root家目录的初始化,.ssh目录已经存在,所以执行相同命令可以正常写入。
- 少数场景下是SELinux、AppArmor这类安全模块处于启动加载阶段,临时限制了对/root目录的写入操作,不过这类情况占比极低。
解决方案
方法1:提前创建.ssh目录并设置正确权限(推荐)
在执行ssh-keyscan之前先手动创建/root/.ssh目录,配置符合ssh要求的权限即可,修改后的代码如下:
... # 私有密钥传入的相关操作 chmod u=rw,go= github_pri_deploy_key eval "$(ssh-agent -s)" # 后台启动ssh-agent ssh-add ${WORKING_DIR_PATH}/github_pri_deploy_key # 新增以下3行代码 mkdir -p /root/.ssh chmod 700 /root/.ssh ssh-keyscan -t rsa github.com > /root/.ssh/known_hosts chmod 600 /root/.ssh/known_hosts
mkdir -p参数会自动创建不存在的父目录,避免目录不存在的报错;ssh要求.ssh目录权限最高为700、known_hosts文件权限最高为600,否则会触发权限校验失败的问题。
方法2:临时禁用主机密钥校验(适合可信场景)
如果不需要做主机密钥校验,可以在执行git clone时通过环境变量指定ssh参数跳过校验,不需要处理known_hosts相关逻辑,命令示例如下:GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git clone git@github.com:你的用户名/你的私有仓库名.git
该方式仅建议用于访问github这类可信官方站点的场景,不建议对不可信的第三方仓库使用。
内容的提问来源于stack exchange,提问作者engineer-x
相关产品推荐
相关产品推荐

