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=list
option 而不是-E
。
答案2
当您将 git 与 sudo 一起使用时,它会在 中查找密钥/root/.ssh/
,而不是在/home/yourusername/.ssh/
.您只需将其复制到前者中就可以了。