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

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

最佳答案

我遇到了这个问题并且无法修复,因为所有解决方案都缺少一个重要步骤,因此我将更详细地发布我的答案。
假设您已经生成了 ssh-key 并将其公钥添加到您的 github 帐户。另外,假设您使用的是 Windows-10。npm install在 Windows 上会导致很多问题,因为有 ssh-agent s 从 2 个不同的来源运行:

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

  • 检测运行 ssh-agent 的来源
  • 运行 start-ssh-agent (运行 git 提供的 ssh-agent)和 ssh-agent (在 cmd 中运行 Windows 提供的 ssh-agent)。
  • 转到任务管理器并单击详细信息选项卡。
  • 查找 ssh-agent.exe。

  • 完成以上步骤后,您可以看到 2 个 ssh-agent.exe 正在运行。在“用户名”列中,您可以看到 的一个系统 (这是由 Windows 提供的)和一个用于 您的用户名 (这是 git)。
    现在,请关闭您为 npm install 启动的所有 ssh-agents(直接从任务管理器)。
    问题原因:
    ssh-agent npm install正在尝试使用来自 git 但它与 Windows 提供的 ssh-agent 冲突。
    Git ssh-agent 可以使用 start-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 build 后您可以自由删除它(即使您想克隆更多 repos 并构建它们)。除非您想为不同的存储库添加更多 key 。
    注:此路径与在 git 安装过程中添加的已经存在的 git/cmd 路径不同,因此请确保添加 之前 openSSH 路径变量以获得更高的优先级。
    请按照以下步骤解决您的问题:
  • 通过运行 start-ssh-agent 启动您的 git ssh-agent在 cmd 中。不要使用 ssh-agent当它启动 Windows 提供的 ssh-agent 时。
  • 打开任务管理器并转到 详情标签。
  • 查找 ssh-agent.exe。
  • 右键单击 ssh-agent.exe(在 git 提供的那个上)并单击 打开文件位置 .
  • 复制路径并将其添加到系统的环境变量中。请确保将此路径移至“%SYSTEMROOT%\System32\OpenSSH”上方。(如果已经存在,请忽略)。
  • 关闭 cmd 并从任务管理器中关闭正在运行的 ssh-agent.exe。
    注: Env 需要关闭 cmd。变量生效。
  • 在你的仓库中打开 cmd 并运行 where ssh-agentwhere ssh-add测试哪个 ssh 路径将是首选。 (希望你现在看到 2 个路径,并且 OpenSSH 不应该出现在 Git/bin/usr 路径之前:))
  • 现在,你完成了。运行 start-ssh-agent .(运行 git ssh-agent)
  • 通过 ssh-add -k ~/.ssh/id_rsa 将您首选的 ssh key 添加到您的 ssh-agent .(选择私钥)。 (将 key 添加到 git ssh-agent,而不是 Windows ssh-agent)
  • 添加成功后,运行 npm install .

  • 注:在此之后,每当您再次看到相同的错误时,只需运行 start-ssh-agent然后 npm install .
    我希望它有效,如果你不舒服,在成功 npm build 后,你甚至可以从 env 中删除新添加的路径。变量,因为它只需要一次(从 gi​​t 访问 ssh-add),和 start-ssh-agent不能从该路径访问。
    编辑:删除路径不会有影响,但我建议不要删除路径,因为该路径还有许多其他有用的工具,例如 perl.exe、openssl.exe(不需要单独安装这些工具)。

    关于node.js - NPM 安装错误本地存储库的权限被拒绝(公钥),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46305961/

    相关文章:

    javascript - 如何运行JXCORE

    javascript - redis zunionstore 动态传递集合

    node.js - 从依赖项和 devDependency 中删除 npm 包

    docker - 使用已安装的节点软件包的配置版本构建Docker镜像

    nativescript - 如何更新 nativescript cli

    node.js - npm install node-sass 抛出错误代码 1

    javascript - npm 登录 - 注册表为 PUT 返回 401

    node.js - Mongoose 更新不更新

    用于获取 http 的 Javascript 变量

    npm - 未处理的拒绝错误:EISDIR:目录上的非法操作