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

使用SSH访问私有Git子模块时遇到权限拒绝问题

解决Git子模块添加时SSH权限拒绝问题

问题原因

你给父仓库game配置的core.sshCommand是本地仓库级别的配置,但git submodule add本质是克隆一个全新的game-engine仓库到子模块目录,这个克隆过程不会继承父仓库的SSH配置,而是使用默认的SSH密钥查找规则,所以找不到你的私有密钥,导致权限拒绝。

解决方案

方法1:临时指定SSH密钥执行子模块添加

在执行git submodule add时,通过环境变量GIT_SSH_COMMAND指定密钥路径,让克隆子模块时使用正确的密钥:

  • Linux/macOS 终端:
    GIT_SSH_COMMAND="ssh -i <path-to-ssh-key>" git submodule add git@github.com:maltebp/game-engine.git
    
  • Windows PowerShell:
    $env:GIT_SSH_COMMAND="ssh -i <path-to-ssh-key>"; git submodule add git@github.com:maltebp/game-engine.git
    
  • Windows CMD:
    set GIT_SSH_COMMAND=ssh -i <path-to-ssh-key> && git submodule add git@github.com:maltebp/game-engine.git
    

添加完成后,进入子模块目录,给子模块配置本地SSH命令,确保后续操作正常:

cd game-engine
git config --local core.sshCommand "ssh -i <path-to-ssh-key>"

方法2:通过SSH配置文件全局管理密钥(更省心)

创建或修改SSH配置文件,为GitHub仓库指定专属密钥,这样所有相关Git操作都会自动使用该密钥:

  1. 打开SSH配置文件:
    • Linux/macOS:~/.ssh/config
    • Windows:C:\Users\<你的用户名>\.ssh\config(如果没有就新建一个)
  2. 添加以下配置:
    Host github-game
        HostName github.com
        User git
        IdentityFile <path-to-ssh-key>
    
  3. 使用配置的Host地址添加子模块:
    git submodule add github-game:maltebp/game-engine.git
    

这种方法不需要每次操作都指定密钥,后续子模块的pull/push也会自动用配置的密钥。

对你疑问的解答

  • 不需要手动传入密钥,但要确保克隆子模块时SSH能定位到你的私有密钥,上面的两种方法都可以实现。
  • 子模块搭配私有仓库的场景并不少见,只是需要注意SSH配置的作用范围——仓库级配置不会自动传递给新克隆的子模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:57:23