You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Git子模块导入私有仓库Terraform模块遇权限问题及解决

Terraform拉取含Git子模块的私有仓库模块权限问题解决

问题场景

  • 需从私有GitHub仓库repo2导入Terraform模块,模块配置代码:
module "ecr_repos" {
  for_each = local.ecr_repos 

  source = "git@github.com:gitaccount/repo2.git//terraform/modules/ecr"
  name = each.key
}
  • repo2包含第三方私有仓库repo3的Git子模块,该子模块目录未被Terraform模块使用
  • 本地通过SSH密钥可正常执行terraform init,但在GitHub Workflow及本地Docker容器中执行失败
  • 已注入非临时的GITHUB_TOKEN环境变量,执行命令如下:
git config --global url."https://oauth2:$GITHUB_TOKEN@github.com".insteadOf ssh://git@github.com
terraform init
  • 报错现象:repo2已下载到.terraform目录,但无法拉取repo3子模块,提示权限拒绝;直接用GITHUB_TOKEN克隆repo2可成功获取子模块
  • 限制条件:不想通过添加SSH密钥到~/.ssh的方式解决问题

解决方法

问题根源是Git子模块的URL格式与原替换规则不匹配,repo2的.gitmodules文件中子模块定义为url = git@github.com:gitaccount/repo3.git,需在terraform init前执行以下Git配置命令:

git config --add --global url."https://oauth2:$GITHUB_TOKEN@github.com/".insteadOf "git@github.com:"

关键注意点:

  • HTTPS URL末尾的/和SSH URL后的:是匹配成功的核心
  • 原规则仅替换ssh://git@github.com格式,但子模块使用的是git@github.com:格式(无ssh://前缀),因此需要针对该格式单独配置替换规则,同时HTTPS地址末尾加/确保路径拼接正确

内容的提问来源于stack exchange,提问作者Stan B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:55:25