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 服务器

如何将多个提交合并到另一个分支上作为单个压缩提交?

linux命令:sudo浅谈

搭建Git服务器

win-sudo插件解决Git bash 执行脚本报错问题 bash: sudo: command not found

另一个系统上的应用程序在启动时崩溃,没有 sudo 的错误消息,非 sudo 的分段错误