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

Windows Powershell中无法克隆Git子模块的问题求助

问题描述

我有一个配置了子模块的项目,子模块使用相对路径,父项目通过SSH克隆,因此子模块也应通过SSH检出。执行命令:git submodule update --init --recursive --remote时,在Windows Powershell中出现Permission denied错误。

推测原因是SSH密钥设置了密码,但Powershell并未像执行git clone时那样提示输入密码。现有的临时方案都不尽如人意:

  • 使用Windows Git Bash(会提示输密码,可正常运行)
  • 不为SSH密钥设置密码
  • 不使用SSH

想了解这是否是已知问题/限制,有无更好的解决办法?


解决方案与说明

这确实是Windows环境下Git与Powershell交互的已知兼容性问题:Powershell默认使用的OpenSSH for Windows客户端,在Git子模块更新的流程中不会主动弹出SSH密钥密码输入提示;而Git Bash依赖的MSYS2环境下的SSH客户端,做了专门的交互适配,所以能正常提示密码。

以下是几个更优的解决办法:

1. 启用SSH代理自动加载密钥

通过ssh-agent缓存密钥密码,后续Git命令无需重复输入:

  • 打开Powershell,先启动SSH代理服务:
    Start-Service ssh-agent
    
  • 添加你的SSH密钥到代理(替换为你的密钥路径):
    ssh-add C:\Users\<你的用户名>\.ssh\<id_rsa或自定义密钥名>
    
    输入一次密钥密码后,代理会缓存该密码,直到你重启电脑或手动关闭代理。
  • (可选)设置SSH代理开机自动启动:通过Windows任务计划程序,创建一个开机触发的任务,执行Start-Service ssh-agent命令,避免每次手动启动。

2. 让Git使用Git Bash的SSH客户端

直接配置Git调用Git Bash环境中的SSH客户端(该客户端支持密码弹窗提示):

  • 执行全局Git配置命令(路径根据你的Git安装位置调整,默认路径如下):
    git config --global core.sshCommand "C:\Program Files\Git\usr\bin\ssh.exe"
    
    配置完成后,在Powershell中执行Git子模块命令时,会自动弹出密码输入窗口,和Git Bash的体验一致。

3. 将SSH密钥密码存储到Windows凭据管理器

Windows的OpenSSH客户端支持将密钥密码保存到系统凭据管理器,实现自动登录:

  • 在Powershell中执行ssh-add添加密钥时,输入密码后会弹出提示:是否允许此应用将密码保存到凭据管理器?选择“是”即可。
  • 后续再执行Git命令时,系统会自动从凭据管理器读取密码,无需手动输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:55:20