Windows下npm install拉取git仓库依赖报publickey权限错误如何解决
问题原因与解决方法
根因
- npm调用git的子进程未正确继承你设置的
GIT_SSH用户环境变量:Windows环境下修改用户环境变量后若未完全重启终端/IDE,或者IDE内置终端未加载最新环境变量,会导致npm调用git时依旧使用git内置的ssh客户端,而非你指定的系统OpenSSH,引发公钥认证失败。 - 部分npm版本运行时会重置部分系统环境变量,导致
GIT_SSH配置不生效。 - 若你生成SSH密钥时设置了口令,npm的无交互子进程无法唤起Windows ssh-agent的验证弹窗,也会导致认证被拒绝。
解决步骤
- 第一步:确认环境变量生效
完全关闭所有终端、IDE、代码编辑器后重新打开,在终端执行以下命令验证GIT_SSH配置:
PowerShell环境执行:echo $env:GIT_SSH
CMD环境执行:echo %GIT_SSH%
确认输出为系统OpenSSH的路径,默认路径为C:\Windows\System32\OpenSSH\ssh.exe,如无输出请重新配置用户环境变量后重启设备。 - 第二步:配置git全局指定ssh客户端
执行git全局配置命令,优先级高于环境变量,npm调用git时也会读取该配置:
路径替换为你本地OpenSSH ssh.exe的实际存储路径。git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe" - 第三步:配置npm使用系统git
执行命令指定npm调用的git程序为你本地安装的系统版本,避免使用npm内置的git:
路径替换为你本地git.exe的实际存储路径。npm config set git "C:\Program Files\Git\cmd\git.exe" - 第四步:验证ssh密钥已加载
执行命令确认ssh-agent中已添加对应仓库的SSH密钥:
如输出为空,执行ssh-add -lssh-add ~/.ssh/你的私钥文件名手动添加密钥。 - 第五步:清理缓存重新安装
执行以下命令清理npm本地缓存后重新执行安装:npm cache clean --force rm -rf node_modules package-lock.json npm install
兜底方案
如果上述操作后依旧报错,可以将package.json中对应依赖的git仓库地址替换为HTTPS协议地址,跳过SSH认证流程直接安装。
内容的提问来源于stack exchange,提问作者paul23
相关产品推荐
相关产品推荐

