以sudo权限运行npm install时,Git认证失败

4

我正在尝试安装一个从我们的私有仓库中拉取的npm包。当我以自己的身份运行npm install时,我会收到 请尝试以root/Administrator身份再次运行此命令。 当我以sudo身份运行它时,我得到以下结果:

npm ERR! Error: Command failed: 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.

我通常不使用sudo来执行npm install。我认为问题在于当我以sudo身份运行时,它会在/var/root/.ssh中查找密钥。我没有root用户凭据,否则我将创建一个新的root密钥。是否有其他解决方法?

编辑:尝试了下面的建议,但它们没有起作用。然而,所涉及的repo是在包根目录下方的一个依赖项引用的。`./node_modules//package.json. 如果我将git url更改为http,则可以工作,但这样做并不是一个好主意,因为当我将软件包重新提交到repo时,我必须更改它。

2个回答

0
我认为问题在于当我以sudo身份运行时,它会在/var/root/.ssh中查找密钥,但是我没有root用户的凭据。
一种解决方法是将该存储库的url更改为http:然后会查询您的登录/密码,而不是依赖于您不能提供的ssh密钥。
cd /path/to/private/repo
git remote set-url origin https://server/user/repo

如果我将git的URL更改为使用http,则可以正常工作,但这样做不是一个好主意,因为当我将软件包重新提交到存储库时,我必须更改它。
实际上,您可以更改URL而无需修改远程URL的配置。
例如(如如何在Git子模块中使用SSH而不是HTTP?中所述)
git config url.https://github.com/.insteadOf ssh://git@github.com/
# or
git config url.https://github.com/.insteadOf git@github.com:

好的,但这与更改配置有什么不同呢?我正在创建一个将被检入存储库的新文件,并告诉配置使用不同的URL。 - Musical Shore
@MusicalShore 因为你可以将其设置为全局配置(而不更改仓库本身的配置:git config --global ...)。 - VonC
那也不行。我尝试了使用我的身份和sudo身份。在npm输出中,我可以看到它仍在使用ssh://。 - Musical Shore

0
尝试这个: sudo /bin/bash 然后运行你的 npm 命令。

在这种情况下出现了什么错误?如果您从您的用户,比如 mshore,运行 sudo /bin/bash,它应该打开一个具有根访问权限但带有 mshore 环境的非登录终端。当您从您的存储库目录执行 sudo /bin/bash,然后执行 git pull 时会发生什么? - Ulises
好的,这基本上意味着你是“root”,并且你的ssh密钥正在从你的用户加载。如果在sudo /bin/bash之后执行whoami,它应该输出root。只是提醒一下,一旦你进入了root bash,就不需要再执行sudo npm ...了。只需执行npm ...即可。 - Ulises
问题似乎自己解决了,我可能无意中修复了它。但是,我确实查看了 /var/root/.ssh/known_hosts 文件,我的密钥在其中。 - Musical Shore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接