NPM 安装错误本地存储库的权限被拒绝(公钥)

Nik*_*Nik 15 node.js npm-install

在我的公司 github 中获取本地存储库的权限被拒绝错误,我可以成功克隆它,但是在安装 NPM 时出现错误:

npm ERR! Error while executing:
npm ERR! C:\Program Files\Git\bin\git.EXE ls-remote -h -t git@<repo path and name>
npm ERR!
npm ERR! Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
npm ERR!
npm ERR! exited with error code: 128
Run Code Online (Sandbox Code Playgroud)

San*_*aur 11

我遇到了这个问题并且无法修复,因为所有解决方案都缺少一个重要步骤,因此我将更详细地发布我的答案。

假设您已经生成了 ssh-key 并将其公钥添加到您的 github 帐户。另外,假设您使用的是 Windows-10。

npm install在 Windows 上会导致很多问题,因为ssh-agent从 2 个不同的来源运行:

  • Windows 提供了 ssh-agent (OpenSSH)。此功能是在 Windows-10 更新之一中添加的,是罪魁祸首。:)
  • Git ssh-agent(你的场景需要这个)(假设安装了git。)

检测运行 ssh-agent 的来源

  • 在 cmd 中运行start-ssh-agent(运行 git 提供的 ssh-agent)和ssh-agent(运行 Windows 提供的 ssh-agent)。

  • 转到任务管理器并单击详细信息选项卡。

  • 查找 ssh-agent.exe。

完成以上步骤后,您可以看到 2 个 ssh-agent.exe 正在运行。在“用户名”列中,您可以看到一个用于SYSTEM(由 Windows 提供)和一个用于您的用户名(这是 git)。现在,请关闭您为 npm install 启动的所有 ssh-agents(直接从任务管理器)。

问题原因:

npm install尝试使用的ssh-agent来自 git,但它与 Windows 提供的 ssh-agent 冲突。

可以使用 Git ssh-agent 启动,start-ssh-agent但是当您尝试使用 command 将 ssh-key 添加到您的 ssh-agent 时ssh-add -k ~/.ssh/id_rsa,它会尝试从 Windows 路径访问 ssh-add.exe 而不是从 git 中选择 ssh-add.exe。

解决方案:

解决办法是将git的ssh路径添加到你系统的环境变量中,并在“%SYSTEMROOT%\System32\OpenSSH”之前添加,这样它的优先级更高。

这只是为了您可以访问 git 的 ssh-add.exe 并且在成功 npm build 后您可以自由删除它(即使您想克隆更多 repos 并构建它们)。除非您想为不同的存储库添加更多密钥。

注意:此路径与在 git 安装期间添加的已经存在的 git/cmd 路径不同,因此请确保将其添加openSSH 路径变量之前以获得更高的优先级。

请按照以下步骤解决您的问题:

  1. 通过start-ssh-agent在 cmd 中运行来启动您的 git ssh-agent 。不要使用,ssh-agent因为它会启动 Windows 提供的 ssh-agent。
  2. 打开任务管理器并转到详细信息选项卡。
  3. 查找 ssh-agent.exe。
  4. 右键单击 ssh-agent.exe(在 git 提供的那个上),然后单击open file location
  5. 复制路径并将其添加到系统的环境变量中。请确保将此路径移至“%SYSTEMROOT%\System32\OpenSSH”上方。(如果已经存在,请忽略)。
  6. 关闭 cmd 并从任务管理器中关闭正在运行的 ssh-agent.exe。 注意: Env 需要关闭 cmd。变量生效。
  7. 在你的 repo 中打开 cmd 并运行where ssh-agentwhere ssh-add测试哪个 ssh 路径将是首选。(希望您现在看到 2 个路径,并且 OpenSSH 不应出现在 Git/bin/usr 路径之前:))
  8. 现在,你完成了。运行start-ssh-agent.(运行 git ssh-agent)
  9. 通过ssh-add -k ~/.ssh/id_rsa.(选择私钥)将您首选的 ssh 密钥添加到您的 ssh-agent 。(将密钥添加到 git ssh-agent,而不是 Windows ssh-agent)
  10. 添加成功后,运行npm install.

注意:此后,每当您再次看到相同的错误时,只需运行start-ssh-agent,然后npm install.

我希望它有效,如果你不舒服,在成功 npm build 后,你甚至可以从 env 中删除新添加的路径。变量,因为它只需要一次(从 gi​​t 访问 ssh-add),而start-ssh-agent不是从该路径访问。

编辑:删除路径不会有影响,但我建议不要删除路径,因为此路径还有许多其他有用的工具,例如 perl.exe、openssl.exe(不需要单独安装这些工具)。

  • 您还可以使用系统 SSH。启用并启动“OpenSSH 身份验证代理”服务。/sf/answers/3647961761/ 然后更新 Git 配置: git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'" https://github.com /桌面/桌面/问题/5641#issuecomment-421801704 (2认同)

Che*_*hev 7

您是说您的 lib 已发布到 npm 注册表,还是尝试使用 npm 直接从 github 安装?听起来你正在尝试做npm install company-org/repo-name. 如果是这样,那么您很可能试图让 npm 从私人仓库中提取。您可以进行克隆,因为您可能已经为 git 设置了一个 SSH 密钥,用于向 Github 进行身份验证。

仔细检查 SSH 是否已设置,然后在 package.json 中使用以下语法:

"package-name": "git+ssh://git@github.com:<company-org>/<repo>.git"
Run Code Online (Sandbox Code Playgroud)

(注意在 company-org 之前使用冒号而不是斜线)