sudo git 作为另一个具有 ssh-agent 的用户进行密钥访问
Posted
技术标签:
【中文标题】sudo git 作为另一个具有 ssh-agent 的用户进行密钥访问【英文标题】:Sudo git as another user with ssh-agent for key access 【发布时间】:2012-02-06 01:58:07 【问题描述】:我为用户 www-data 设置了 ssh-agent,并为私钥保存了密码
我需要从 root 运行“sudo -u www-data git pull”,这样它就不会询问 git 私钥密码。 sudo 不运行 .bashrc 脚本,所以不知道如何解决这个问题?
有什么建议吗?
【问题讨论】:
手动获取 rc 文件怎么样?另外,unix.SE 可能会让你更幸运。 为我缺乏知识而道歉,但是手动 rc 文件是什么意思?我不确定位掩码有什么帮助?谢谢 Eehhh ...首先,bitmask 是我的用户名,不是建议。另一件事是,您似乎已经发现问题是由sudo
导致的,而不是“运行 .bashrc 脚本”,所以我认为您可以通过自己采购(即运行)来解决这个问题。
非常感谢!我是这方面的新手。我所要做的就是创建一个 .bash_profile 文件,该文件以 .bashrc 为源,我的 ssh 代理脚本正在加载并且可以正常工作。
太好了,这就是我通过 commenting 而不是 answering 得到的 :) 无论如何,这基本上是 Jefromi 的回答所暗示的。
【参考方案1】:
我这样做,并将 ssh-add 作为我的 .bash_profile 的一部分:
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。
【讨论】:
不幸的是,这也不起作用。它仍然要求输入密钥的密码 它是使用 -i 开关和从 .bash_profile 获取 .bashrc 的组合(因为 -i 运行 .bash_profile 或 .profile 但不运行 .bashrc)。感谢您帮助我找到正确的答案! @jadent:通常默认的 .profile 或 .bash_profile 来自 bashrc;我不知道你的没有。以上是关于sudo git 作为另一个具有 ssh-agent 的用户进行密钥访问的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 上设置具有 HTTP 访问权限的 Git 服务器