使用sudo进行git克隆

11

当我在用户提示符下使用ssh进行git克隆时,它可以正常工作。

git clone ssh://URL.com/soft.git soft_git

SSH密钥id_rsaid_rsa.pub位于/home/user/.ssh下。

我的目的是使用sudo执行git,但我收到了以下错误:

Cloning into '/home/user/git/soft'...
Permission denied (publickey,keyboard-interactive).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我创建了一个文件夹/root/.ssh,并将ssh密钥复制到其中,但我收到了相同的错误。

如何正确使用sudo执行git。

3个回答

18
当你使用sudo运行git时,git将作为root用户运行。因为git正在以root用户身份运行,ssh也是以root用户身份运行。由于ssh正尝试以root用户登录到远程服务器,但远程服务器不接受这样的操作(这应该是正确的做法!)。
你需要执行以下两个操作:
  • 在URL中添加用户名:ssh://myusername@URL.com/soft.git。

  • 使你的SSH密钥对root用户可用,因为它会查找/root/.ssh而不是/home/user/.ssh。(你可能还可以将SSH指向正确的密钥,但我不知道如何做,而且SSH对权限要求很严格。)


4
在我的电脑上(Ubunutu 18.04),在sudo之后、git之前添加 SSH_AUTH_SOCK=$SSH_AUTH_SOCK 解决了这个问题。
sudo SSH_AUTH_SOCK=$SSH_AUTH_SOCK git clone git@github.com:my-github-account/my-repo.git 

通常情况下,sudo的SSH_AUTH_SOCK环境变量不会被正确设置。使用SSH_AUTH_SOCK=$SSH_AUTH_SOCK来执行git克隆将sudo的SSH_AUTH_SOCK环境变量设置为您的环境变量。

这样一来,您就不需要为sudo添加额外的.ssh目录并复制您的密钥,这是其他答案建议的内容之一。

具体解决方案已在这个相当古老的github gist中做出详细解释: https://gist.github.com/scottjacobsen/4281310

P.S. 我几年后再次回答这个问题;我通过谷歌搜索解决了这个问题,而这个 SO Q/A 是最先出现的网页之一。


1

通常默认的远程ssh用户与您的用户名相同。如果您正在使用sudo,那么这将是root,这可能不起作用。您需要提供远程用户名。

sudo git clone ssh://username@URL.com/soft.git soft_git

如果您遇到git ssh问题,通常可以尝试使用普通ssh登录到远程主机来解决问题。这样您可以获得更好的诊断信息,看到出了什么问题。

sudo ssh ssh://URL.com/

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