如何允许 git pull 作为 sudo

如何允许 git pull 作为 sudo

git pull我每天都在我的机器上使用(没有 sudo),我的 ssh 文件夹中有一把钥匙( cat ~/.ssh/id_rsa.pub

问题是,我无法调用sudo git pull,因为我收到错误:

sudo git pull
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

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

可能是我的钥匙有问题。

我需要在外部脚本中调用它(使用 sudo)。

我怎样才能打电话sudo git pull?如何为 sudo 添加密钥?

简而言之:pull不起作用,sudo为什么?

答案1

当您运行某些程序而sudo没有指定特定用户时,您是以root用户身份运行它的。

因为看起来您通过 SSH 克隆了您的存储库,git(实际上我猜是 SSH)正在寻找用户的 SSH 私钥,root而不是您的用户之一:/root/.ssh//home/your-user/.ssh/.

您可以尝试以下操作:

  • 使用以下命令运行脚本sudo -E-E保留在 sudo 上运行时定义的用户环境变量(我认为SSH_AUTH_SOCK和/或SSH_AGENT_LAUNCHER将需要一些 SSH 变量,但我不太了解细节)。

  • 在脚本中,“以用户身份”而不是“以 root 身份”运行 git 命令。为了实现这一点,您可以sudo再次依赖:)

    sudo -E -u $(logname) git pull
    

请注意,您使用了sudo -E两次:一次调用脚本,另一次git在脚本内部调用。

那应该有效:)

PS 如果您需要更细粒度地控制将哪些环境变量导出到 sudo,请使用--preserve-env=listoption 而不是-E

答案2

当您将 git 与 sudo 一起使用时,它会在 中查找密钥/root/.ssh/,而不是在/home/yourusername/.ssh/.您只需将其复制到前者中就可以了。

相关内容