Powershell 中的 npm install private Gitlab Repo 权限被拒绝(公钥)

Powershell 中的 npm install private Gitlab Repo 权限被拒绝(公钥)

我尝试通过 npm 将私有 gitlab 存储库安装到另一个节点项目。命令是npm install --save gitlab:my-project#master 此失败,并显示

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.

我有以下设置:Windows 10、git 和 Powershell。

在 Powershell 中直接使用 git 命令运行良好,例如git pull要求输入我的私钥密码,它就可以正常工作。除了命令之外,所有其他 git 功能都运行良好npm install,该命令似乎在内部使用 git。

如果我使用 git bash(在 Windows 上随 git 一起安装),我可以运行 npm 命令并安装私有存储库。它仅在 Powershell 中失败。

尽管如此,有人可能会说:使用 git bash,但我不知何故习惯了 PowerShell。:)

答案1

我也遇到了同样的问题。以下是我解决问题的方法/解决方法:

  • 确保您可以针对 GitHub 进行身份验证:ssh -T [email protected]
  • 确保OpenSSH Authentication Service没有被禁用(将其设置为手动启动) -不确定这一步是否必要
  • 现在最重要的一步id_rsa:从您的密钥中删除密码保护。npm install无法处理受密码保护的 ssh 密钥。

我建议添加只读直接将 SSH 密钥连接到您想要安装的存储库。这使得拥有没有密码保护的 SSH 密钥的危险性降低一些。

添加一个config文件,~/.ssh/在其中定义您的密钥:

IdentityFile ~/.ssh/id_rsa IdentityFile ~/.ssh/repository_ssh_key

答案2

我遇到了这个问题,但无法解决,因为所有的解决方案都缺少一个重要的步骤,所以我非常详细地发布了我的答案。

假设你已经生成了ssh-key并将其公钥添加到你的github账户。

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

  • 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 正在运行。在“用户名”列中,您可以看到一个系统(由 Windows 提供)和一个您的用户名(这是 git)。现在,请关闭为 npm install 运行的所有 ssh-agents。

问题原因:

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

可以使用 Git ssh-agent 启动start-ssh-agent,但是当您尝试使用命令将 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 后,您可以自由地删除它(即使您想克隆更多存储库并构建它们)。除非您想为不同的存储库添加更多密钥。

笔记:此路径与 git 安装期间添加的现有 git/cmd 路径不同,因此请确保已添加openSSh 路径变量以获得更高的优先级。

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

  1. 在 cmd 中运行以启动 git ssh-agent start-ssh-agent。不要使用,ssh-agent因为它会启动 Windows 提供的 ssh-agent。
  2. 打开任务管理器并转到细节标签。
  3. 查找 ssh-agent.exe。
  4. 右键单击 ssh-agent.exe(由 git 提供的),然后单击打开文件所在位置
  5. 复制路径并将其添加到系统环境变量中。(如果已经存在则忽略)。
  6. 关闭 cmd 并从任务管理器中关闭正在运行的 ssh-agent.exe。 笔记:需要关闭 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

我希望它能起作用,如果您不舒服,在 npm build 成功后,您甚至可以从 env.variables 中删除新添加的路径,因为它只需要一次(从 gi​​t 访问 ssh-add),并且start-ssh-agent不是从该路径访问的。

答案3

权限被拒绝(公钥)。

这意味着您当前的公钥无法被远程服务器验证。


检查通过 SSH 访问

跑步:

ssh -T [email protected]

查看您是否已gitlab.com正确验证身份。否则,请确保已将您的身份添加publickey到 GitLab 帐户。

使用git+ssh://

使用git+ssh://,而不是git://,例如:

npm i -S git+ssh://[email protected]/my-project/repo.git

看:npm从 GitLab 私有存储库安装模块

通过 SSH 提供不同的身份

要列出您当前的身份,请运行:

ssh-add
ssh-add -L

要添加不同的身份,请运行:ssh-add ~/.ssh/MyOtherKey.pem

查看npm

另外,请确保你没有使用任何proxynpm通过 检查配置npm config list

使用npm企业

您可以使用 npm Enterprise 连接到现有的验证系统,例如 OAuth2(用于 GitLab),GitHub 企业版和其他。您还可以检查现有的 auth-plugin(对于 GitLab,请参阅:npme-auth-gitlab),或者写一个自定义身份验证

使用个人令牌

至于解决方法,您可以创建您的个人或 OAuth2 访问令牌(GitLab/OAuth2GitHub/开放授权) 并将其与您的私有存储库 URL 一起使用。OAuth 令牌将允许您通过 API 访问存储库,并直接通过 URL 访问个人令牌,例如

  • GitHub:https://[email protected]/my-project/repo
  • GitLab:https://gitlab.com/my-project/repo?private_token=<PERSONAL_ACCESS_TOKEN>

相关内容