EC2 Userdata脚本克隆Bitbucket私有仓库失败问题排查
解决EC2 Userdata中Git Clone失败的问题
核心原因
Cloud-Init(Userdata)默认以root用户执行,和手动登录的普通用户(如ubuntu)环境存在差异:
$HOME指向/root而非普通用户家目录- 环境变量、SSH配置路径与手动执行时不一致
- 可能缺少SSH主机密钥缓存
具体解决方案
1. 明确指定SSH密钥路径执行Git Clone
在Git命令中直接指定私钥位置,避免依赖默认的~/.ssh/id_rsa路径:
git clone -b dev git@bitbucket.org:xxx/yyy.git --config core.sshCommand="ssh -i /home/ubuntu/.ssh/id_rsa -o StrictHostKeyChecking=no"
替换/home/ubuntu/.ssh/id_rsa为你实际存放私钥的路径。
2. 同步密钥到Root用户的SSH目录
如果要保持Git命令简洁,可先将私钥复制到root的SSH目录并设置权限:
# 创建root的SSH目录(如果不存在) mkdir -p /root/.ssh # 复制私钥到root目录 cp /home/ubuntu/.ssh/id_rsa /root/.ssh/ # 设置正确的权限(必须600) chmod 600 /root/.ssh/id_rsa # 提前添加Bitbucket的主机密钥到known_hosts ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
之后再执行原Git Clone命令即可。
3. 启用Git详细日志排查问题
在Userdata的Git命令中添加-vv参数,输出详细调试信息到/var/log/cloud-init-output.log,方便定位具体失败点:
git clone -b dev git@bitbucket.org:xxx/yyy.git -vv
查看日志时可重点关注权限错误、路径不存在、SSH连接细节等信息。
4. 确保Userdata脚本的执行顺序
如果私钥是在Userdata中生成或复制的,要确保密钥权限设置、SSH认证测试命令在Git Clone之前执行,避免时序问题。
内容的提问来源于stack exchange,提问作者lalala hey
相关产品推荐
相关产品推荐

