GitHub Actions自托管运行器执行Terraform Init时认证失败
解决方案
1. 修正Git凭据文件的路径与权限
自托管运行器的执行用户可能和预期不同,导致~/.git-credentials路径未正确指向当前用户目录。修改Configure Git Credentials步骤,明确使用$HOME变量并确保文件权限安全:
- name: Configure Git Credentials run: | mkdir -p $HOME/.git git config --global credential.helper store echo "https://x-access-token:${{ secrets.GIT_PAT }}@github.com" > $HOME/.git-credentials chmod 600 $HOME/.git-credentials env: GIT_PAT: ${{ secrets.GIT_PAT }}
如果自托管运行器被多个工作流共享,建议改用本地仓库配置避免全局冲突:
- name: Configure Git Credentials run: | git config credential.helper store echo "https://x-access-token:${{ secrets.GIT_PAT }}@github.com" > $HOME/.git-credentials chmod 600 $HOME/.git-credentials env: GIT_PAT: ${{ secrets.GIT_PAT }}
2. 使用Terraform专属环境变量认证
无需修改Git配置,直接在工作流的env块中添加Terraform专用的模块下载令牌,Terraform会自动用此令牌拉取私有模块:
env: # 保留原有环境变量 TF_MODULE_DOWNLOAD_TOKEN: ${{ secrets.GIT_PAT }}
添加后可直接移除Configure Git Credentials步骤。
3. 升级自托管运行器的Git版本
旧版本Git可能不兼容credential.helper store特性,以Ubuntu为例执行升级:
sudo apt update && sudo apt install git -y
验证版本:git --version,确保使用2.28及以上版本。
4. 清理自托管运行器上的残留凭据
如果运行器之前存储过其他Git凭据,可能导致认证冲突,执行以下命令清理:
git config --global --unset credential.helper rm -f $HOME/.git-credentials
5. 验证PAT权限与有效期
确认你的PAT拥有repo权限(用于访问私有仓库),且未过期。可在GitHub个人设置的"开发者设置"中检查PAT的权限范围和有效期。
内容的提问来源于stack exchange,提问作者Tharun
相关产品推荐
相关产品推荐

