为何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仅读取
根因定位
非管理员模式下Git启动SSH子进程时,继承的HOME(主目录)环境变量被异常修改为T盘根目录。SSH默认以HOME路径为基准查找.ssh目录下的配置、密钥文件,因此会去错误的T:\.ssh路径下检索资源,找不到有效私钥导致认证失败。
直接在PowerShell中执行ssh命令时,继承的是PowerShell Shell进程本身持有的正确HOME变量(指向C:\Users\my_user),因此手动执行SSH认证可以正常通过,仅Git调用SSH时触发路径错误。
修复方案
按优先级从高到低选择以下方案操作即可:
- 快速修复(无需调整系统配置):执行命令显式指定Git调用SSH时使用的密钥和配置路径,绕开环境变量异常问题
配置完成后直接测试Git操作即可生效。git config --global core.sshCommand "ssh -i C:/Users/my_user/.ssh/id_rsa -F C:/Users/my_user/.ssh/config" - 根因修复:修正异常的环境变量配置
- 非管理员模式打开PowerShell,依次执行
echo $HOME、echo $env:USERPROFILE,如果返回值为T:\则确认环境变量配置异常 - 打开Windows系统环境变量配置面板,检查当前用户维度的
HOME、USERPROFILE变量,删除指向T盘的错误配置,将变量值修改为当前用户的实际主目录C:\Users\my_user - 关闭所有PowerShell窗口重新打开,测试Git操作即可
- 非管理员模式打开PowerShell,依次执行
- 安装修复:如果以上方案无效,重新运行Git for Windows安装包,在配置步骤中确认将Git默认主目录设置为当前Windows用户的个人目录,不要选择便携模式、临时盘/移动盘路径,覆盖安装后重启终端测试。
内容的提问来源于stack exchange,提问作者Egor
相关产品推荐
相关产品推荐

