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

同一组织下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方式拉取,就需要配置密钥:

  1. 生成一对SSH密钥,把公钥添加到仓库B的「Settings」→「Deploy keys」里(按需勾选「Allow write access」)。
  2. 把私钥添加到仓库A的「Settings」→「Secrets and variables」→「Actions」中,命名为比如SSH_PRIVATE_KEY。
  3. 在工作流里先配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:08