EC2 Auto Scaling组用户数据执行时git clone命令失败问题咨询
问题根因
- 执行用户身份不匹配:EC2实例的用户数据脚本默认以
root用户身份运行,你手动执行git clone时使用的是ec2-user(或其他自定义普通用户)。你提前上传到AMI的SSH私钥存放在普通用户的~/.ssh/目录下,root用户执行git操作时无法读取到对应私钥,无法通过GitHub的SSH认证,因此拉取代码失败。 - 缺少主机指纹确认:首次通过SSH连接GitHub时会触发主机指纹确认步骤,你手动执行时已经完成过确认,而脚本自动运行时没有交互式环境处理确认步骤,会直接卡住终止git操作。
可行解决方案
方案1:指定普通用户执行git操作
如果你的SSH私钥存放在ec2-user目录下,直接用sudo -u指定执行用户即可,修改脚本对应部分:
#! /bin/sh sudo -u ec2-user git clone mygithubrepository sudo -u ec2-user bash -c "cd backend && git checkout mybranch" cd /home/ec2-user/backend/src # 后面接你原来的生成配置文件逻辑
方案2:指定git使用的私钥路径
在脚本开头添加环境变量,明确指定SSH私钥路径,同时跳过主机指纹确认:
#! /bin/sh export GIT_SSH_COMMAND="ssh -i /home/ec2-user/.ssh/id_rsa -o StrictHostKeyChecking=no" git clone mygithubrepository # 后面接你原来的脚本逻辑
方案3:使用HTTPS+个人访问令牌拉取代码
直接改用GitHub个人访问令牌(PAT)通过HTTPS拉取代码,无需处理SSH密钥权限问题,clone地址格式为:https://你的PAT令牌@github.com/你的用户名/仓库名.git
调试建议
如果修改后仍有问题,可在脚本开头添加日志输出配置,排查具体错误:
#! /bin/sh set -x exec > /var/log/user-data-exec.log 2>&1 # 后面接你原来的脚本内容
实例启动完成后查看/var/log/user-data-exec.log文件,即可看到每一步命令的执行日志和报错信息。
内容的提问来源于stack exchange,提问作者Usman Muhammad
相关产品推荐
相关产品推荐

