同一组织下Github Actions无法通过SSH克隆子模块
GitHub Actions拉取同组织私有子模块权限问题解决
为什么开了组织内仓库互访还是报错?
GitHub Actions默认使用的GITHUB_TOKEN权限范围仅限当前仓库(A),哪怕你开了组织内仓库互访,这个默认token也没法跨仓库访问私有子模块B,所以会触发公钥权限拒绝的错误。
需要配置SSH密钥吗?有两种解决办法:
方法1:调整GITHUB_TOKEN权限(推荐,无需额外密钥)
这是最简单的方式,不用折腾SSH密钥:
- 在工作流的
actions/checkout步骤里,指定token为${{ secrets.GITHUB_TOKEN }},同时开启子模块递归拉取:- name: 拉取代码及子模块 uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} submodules: 'recursive' - 还要确保仓库A的Workflow权限足够:进入仓库A的「Settings」→「Actions」→「General」→「Workflow permissions」,设置为「Read and write permissions」(至少要能读取仓库B)。
方法2:配置SSH密钥(适合特殊场景)
如果必须用SSH方式拉取,就需要配置密钥:
- 生成一对SSH密钥,把公钥添加到仓库B的「Settings」→「Deploy keys」里(按需勾选「Allow write access」)。
- 把私钥添加到仓库A的「Settings」→「Secrets and variables」→「Actions」中,命名为比如
SSH_PRIVATE_KEY。 - 在工作流里先配置SSH代理,再执行子模块更新:
- name: 配置SSH代理 uses: webfactory/ssh-agent@v0.9.0 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: 更新子模块 run: git submodule update --init --recursive
你遗漏了什么步骤?
核心是没给GitHub Actions的执行环境赋予访问子模块B的权限——不管是调整GITHUB_TOKEN的权限范围,还是配置SSH密钥,都是为了补上这个权限缺口。
内容的提问来源于stack exchange,提问作者northsideknight
相关产品推荐
相关产品推荐

