You need to enable JavaScript to run this app. 树莓派带sudo运行git自动推送脚本出现public key权限报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

树莓派带sudo运行git自动推送脚本出现public key权限报错如何解决?

问题原因

核心是sudo切换运行身份后,SSH密钥读取路径不匹配:

  • 你日常操作和不加sudo运行脚本时,身份是默认的pi用户,SSH密钥默认存放在/home/pi/.ssh/目录下,git调用SSH时会自动读取该路径下的私钥完成鉴权,因此运行正常。
  • 加sudo运行脚本时,脚本的实际运行身份变成了root用户,root用户的家目录为/root,git调用SSH时会默认读取/root/.ssh/路径下的私钥,你之前生成的SSH密钥仅存放在pi用户目录下,root用户没有对应的鉴权凭证,因此报Permission denied(public key)错误。
  • 你单独在终端执行push操作正常,也是因为操作身份是pi用户,和密钥本身有效性无关。

解决方案

你可以根据自己的使用场景选择以下任意一种方法:

  1. 运行脚本时保留当前用户环境
    执行命令时添加-E参数保留当前用户的环境变量:
sudo -E bash measurement.sh

如果你的sudo配置默认禁止保留HOME变量,可以直接在autoupdate.sh的git push命令中强制指定私钥路径:

git add -A && git commit -m "$1: Update files" && git -c core.sshCommand="ssh -i /home/pi/.ssh/id_rsa" push origin main
  1. 给root用户配置对应SSH密钥
    直接将pi用户的SSH密钥复制到root用户的配置目录并修改对应权限:
sudo cp /home/pi/.ssh/id_rsa* /root/.ssh/
sudo chown root:root /root/.ssh/id_rsa*
sudo chmod 600 /root/.ssh/id_rsa

注意该方法存在一定安全风险,相当于root用户也拥有了你Git仓库的读写权限,请按需选择。
3. 拆分脚本权限
如果仅脚本中部分操作需要root权限,仅给对应操作添加sudo前缀,整个脚本用普通pi用户运行,无需给整个脚本加sudo,安全性最高。

内容的提问来源于stack exchange,提问作者CoffeePlease

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:57:01