![Powershell 中的 npm install private Gitlab Repo 权限被拒绝(公钥)](https://linux22.com/image/1556574/Powershell%20%E4%B8%AD%E7%9A%84%20npm%20install%20private%20Gitlab%20Repo%20%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%EF%BC%88%E5%85%AC%E9%92%A5%EF%BC%89.png)
我尝试通过 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 路径变量以获得更高的优先级。
请按照以下步骤解决您的问题:
- 在 cmd 中运行以启动 git ssh-agent
start-ssh-agent
。不要使用,ssh-agent
因为它会启动 Windows 提供的 ssh-agent。 - 打开任务管理器并转到细节标签。
- 查找 ssh-agent.exe。
- 右键单击 ssh-agent.exe(由 git 提供的),然后单击打开文件所在位置。
- 复制路径并将其添加到系统环境变量中。(如果已经存在则忽略)。
- 关闭 cmd 并从任务管理器中关闭正在运行的 ssh-agent.exe。 笔记:需要关闭 cmd 才能使环境变量生效。
- 在您的 repo 中打开 cmd 并运行
where ssh-agent
,where ssh-add
以测试哪个 ssh 路径是首选。(希望您现在看到 2 条路径,并且 OpenSSH 不应出现在 Git/bin/usr 路径之前:)) - 现在,您已完成。运行
start-ssh-agent
。(运行 git ssh-agent) ssh-add -k ~/.ssh/id_rsa
通过.(选择私钥)将您首选的 ssh 密钥添加到您的 ssh-agent 。(将密钥添加到 git ssh-agent,而不是 Windows ssh-agent)- 添加成功后,运行
npm install
。
我希望它能起作用,如果您不舒服,在 npm build 成功后,您甚至可以从 env.variables 中删除新添加的路径,因为它只需要一次(从 git 访问 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
通过 SSH 提供不同的身份
要列出您当前的身份,请运行:
ssh-add
ssh-add -L
要添加不同的身份,请运行:ssh-add ~/.ssh/MyOtherKey.pem
查看npm
另外,请确保你没有使用任何proxy
。npm
通过 检查配置npm config list
。
使用npm
企业
您可以使用 npm Enterprise 连接到现有的验证系统,例如 OAuth2(用于 GitLab),GitHub 企业版和其他。您还可以检查现有的 auth-plugin(对于 GitLab,请参阅:npme-auth-gitlab
),或者写一个自定义身份验证。
使用个人令牌
至于解决方法,您可以创建您的个人或 OAuth2 访问令牌(GitLab/OAuth2;GitHub/开放授权) 并将其与您的私有存储库 URL 一起使用。OAuth 令牌将允许您通过 API 访问存储库,并直接通过 URL 访问个人令牌,例如
- GitHub:
https://[email protected]/my-project/repo
- GitLab:
https://gitlab.com/my-project/repo?private_token=<PERSONAL_ACCESS_TOKEN>