使用ssh-agent作为密钥访问,以其他用户身份执行sudo git

6
我已经为用户www-data设置了ssh-agent,并保存了私钥的密码。
从root用户开始,我需要运行“sudo -u www-data git pull”,以便不需要输入git私钥的密码。但是,sudo不会运行.bashrc脚本,所以我不确定如何完成此操作?
有什么建议吗?

手动获取rc文件怎么样?此外,您可能会在unix.SE上更加幸运。 - bitmask
抱歉我的知識不足,但您說的手動rc文件是什麼意思?我也不確定位元遮罩會如何幫助?謝謝。 - jadent
额...首先,bitmask是我的用户名,不是建议。另一件事是,你似乎已经发现问题是由于sudo没有“运行.bashrc脚本”导致的,所以我想你可以通过自己进行源代码(即运行)来解决这个问题。 - bitmask
非常感谢!我对这方面还很陌生。我所要做的就是创建一个.bash_profile文件,其中引用了我的ssh代理脚本加载的.bashrc文件,然后它就起作用了。 - jadent
太好了,这就是我因为“注释”而不是“回答”得到的结果 :) 无论如何,这基本上就是Jefromi的答案建议的内容。 - bitmask
2个回答

4
我会这样做,并在我的.bash_profile文件中执行ssh-add:
sudo -u otherusername ssh-agent bash -l

很不幸,当我使用向上箭头时,似乎没有任何历史记录。但是,当我运行同样的命令(减去sudo部分)时,却有历史记录。

顺便说一下,这是我在bash配置文件中添加的自动启动ssh-agent(仅一次)和添加RSA密钥(仅一次)的内容:

# Start ssh-agent & add key
if [[ -z $SSH_AGENT_PID ]]; 
then 
    echo Starting ssh-agent automatically...
    ssh-agent bash -l
elif [[ 0 == `ssh-add -l | grep "(RSA)" -c` ]];
then
    echo Adding ssh key automatically...
    # you might have your key in a different location:
    ssh-add ~/.ssh/idents/id_rsa
fi

2
也许你需要使用-i选项?从man sudo中可以看到:

-i [command]

-i(模拟初始登录)选项将以目标用户passwd(5)条目中指定的shell作为登录shell运行。这意味着shell将读取类似于.profile或.login的特定于登录的资源文件。如果指定了命令,则传递给shell以执行。否则,将执行交互式shell。


很不幸,这也不起作用。它仍然要求输入密钥密码。 - jadent
这是使用-i开关与从.bash_profile源化.bashrc的组合(因为-i运行.bash_profile或.profile但不运行.bashrc)的结果。感谢您帮助我找到正确答案! - jadent
@jadent:通常默认的.profile或.bash_profile会调用bashrc,我不知道你的没有这样做。 - Cascabel

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