【问题标题】:make git clone with sudo使用 sudo 进行 git 克隆
【发布时间】:2016-01-21 06:58:01
【问题描述】:

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

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。

【问题讨论】:

    标签: linux git ssh sudo


    【解决方案1】:

    当您使用 sudo 运行 git 时,git 将以 root 身份运行。因为 git 以 root 身份运行,所以 ssh 以 root 身份运行。因为 ssh 以 root 身份运行,所以它试图以 root 身份登录到远程服务器。远程服务器对此不满意(应该如此!)

    你需要做两件事:

    • 将用户名放在您的 URL 中:ssh://myusername@URL.com/soft.git。

    • 使您的 SSH 密钥对 root 用户可用,因为它将在 /root/.ssh 下而不是 /home/user/.ssh 下查找。 (您也可以将 SSH 指向正​​确的密钥,但我不知道该怎么做,而且 SSH 对权限很挑剔。)

    【讨论】:

      【解决方案2】:

      在我的电脑(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 clone 会将 sudo 的 SSH_AUTH_SOCK 环境变量设置为适合您的任何环境变量。

      这样,您无需使用密钥副本为 sudo 添加额外的 .ssh 目录,这是我认为其他答案之一所暗示的。

      在这个相当古老的 github gist 中更全面地解释了解决方案: https://gist.github.com/scottjacobsen/4281310

      附:几年后我添加了一个新答案;我搜索了这个问题的解决方案,这个 SO Q/A 是最先出现的问题之一。

      【讨论】:

        【解决方案3】:

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

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

        您通常可以通过尝试使用普通 ssh 登录到远程来更轻松地解决 git ssh 问题。您将获得更好的诊断结果,并且可以查看问题所在。

        sudo ssh ssh://URL.com/
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-26
          • 2016-11-20
          • 1970-01-01
          相关资源
          最近更新 更多