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

时间:2017-09-19 16:57:10

标签: 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

3 个答案:

答案 0 :(得分:4)

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

Double check that SSH is setup然后在package.json中使用此语法:

"package-name": "git+ssh://git@github.com:<company-org>/<repo>.git"

(注意在公司组织之前使用冒号而不是斜线)

答案 1 :(得分:3)

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

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

Windows上的

npm install引起了很多问题,因为有ssh-agent来自两个不同的来源:

  • 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-agent(直接从任务管理器启动)。

问题原因:

npm install尝试使用的

ssh-agent来自git,但与提供的ssh-agent的窗口冲突。

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

解决方案:

解决方案是将git的ssh路径添加到系统的环境变量中,并将其添加到“%SYSTEMROOT%\ System32 \ OpenSSH”之前,以便具有更高的优先级。

这仅是必需的,以便您可以访问git的ssh-add.exe,并且在成功构建npm后,您可以自由删除它(即使您要克隆更多存储库并进行构建)。除非您要为不同的存储库添加更多密钥。

注意:此路径与git安装过程中添加的已经存在的git / cmd路径不同,因此请确保在之前 openSSh路径变量中添加它以获得更高的优先级。

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

  1. 通过在cmd中运行start-ssh-agent来启动git ssh-agent。在启动Windows提供的ssh-agent时,请不要使用ssh-agent
  2. 打开任务管理器并转到详细信息标签。
  3. 寻找ssh-agent.exe。
  4. 右键单击ssh-agent.exe(由git提供),然后单击打开文件位置
  5. 复制路径并将其添加到系统的环境变量中。(如果已存在,请忽略)。
  6. 关闭cmd,并从任务管理器中关闭正在运行的ssh-agent.exe。 注意:Env需要关闭cmd。变量才能生效。
  7. 在您的存储库中打开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-agent添加您首选的ssh密钥。(选择私钥)。 (将密钥添加到git ssh-agent,而不是Windows ssh-agent)
  10. 添加成功后,运行npm install

注意:之后,只要再次遇到相同的错误,只需运行start-ssh-agent,然后运行npm install

我希望它能起作用,如果您不满意,则在成功构建npm后,您甚至可以从env中删除新添加的路径。变量,因为它只需要一次(从git访问ssh-add),而从该路径不能访问start-ssh-agent

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

答案 2 :(得分:0)

如果您尝试在全局/本地安装任何依赖项,请确保在开始时使用 @。 例如: sudo npm i -g @vue/cli --正确。 sudo npm i -g vue/cli -- 抛出上述错误。