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

为何git clone仅能在管理员身份运行的PowerShell中正常工作?

问题现象
  • 个人GitLab账号已完成SSH密钥配置,仅在以管理员身份运行PowerShell时可正常执行git clone操作
  • 无论PowerShell是否持有管理员权限,直接执行ssh -T git@my.gitlab.host.com均可返回认证成功结果:Welcome to GitLab, @username!
  • 目标:实现无需管理员权限运行PowerShell,即可正常执行Git仓库的克隆、拉取、推送操作
已排查信息
  • 两种权限模式下执行whoami命令,返回的用户身份完全一致
  • 非管理员模式下执行git clone、git push均返回公钥权限拒绝报错,报错内容如下:

git@my.gitlab.host.com: Permission denied (publickey). fatal:
Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

  • 通过git config --global core.sshCommand "ssh -Tv"配置SSH调试日志(配置GIT_SSH_COMMAND环境变量的方案未生效),抓取日志发现差异:
    • 非管理员模式下执行Git操作时,SSH仅读取/etc/ssh/ssh_config全局配置,从/t/.ssh/路径查找密钥文件,完全未访问当前用户的实际SSH目录
    • 管理员模式下执行Git操作时,SSH会正常读取/c/Users/my_user/.ssh/config用户配置,加载C:/Users/my_user/.ssh/id_rsa密钥完成认证
根因定位

非管理员模式下Git启动SSH子进程时,继承的HOME(主目录)环境变量被异常修改为T盘根目录。SSH默认以HOME路径为基准查找.ssh目录下的配置、密钥文件,因此会去错误的T:\.ssh路径下检索资源,找不到有效私钥导致认证失败。
直接在PowerShell中执行ssh命令时,继承的是PowerShell Shell进程本身持有的正确HOME变量(指向C:\Users\my_user),因此手动执行SSH认证可以正常通过,仅Git调用SSH时触发路径错误。

修复方案

按优先级从高到低选择以下方案操作即可:

  • 快速修复(无需调整系统配置):执行命令显式指定Git调用SSH时使用的密钥和配置路径,绕开环境变量异常问题
    git config --global core.sshCommand "ssh -i C:/Users/my_user/.ssh/id_rsa -F C:/Users/my_user/.ssh/config"
    
    配置完成后直接测试Git操作即可生效。
  • 根因修复:修正异常的环境变量配置
    1. 非管理员模式打开PowerShell,依次执行echo $HOME、echo $env:USERPROFILE,如果返回值为T:\则确认环境变量配置异常
    2. 打开Windows系统环境变量配置面板,检查当前用户维度的HOME、USERPROFILE变量,删除指向T盘的错误配置,将变量值修改为当前用户的实际主目录C:\Users\my_user
    3. 关闭所有PowerShell窗口重新打开,测试Git操作即可
  • 安装修复:如果以上方案无效,重新运行Git for Windows安装包,在配置步骤中确认将Git默认主目录设置为当前Windows用户的个人目录,不要选择便携模式、临时盘/移动盘路径,覆盖安装后重启终端测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:03:19