SSH-Add能否进行全局添加

6
我可以对永久保存的identifyFile执行ssh-add吗?目前它只对当前活动的ssh会话有效(也就是说,使用ssh-add添加的identityFile在使用ssh与服务器建立新的ssh会话时会丢失,可以通过运行ssh-add -L找到)。
问题在于我们的亚马逊服务器有各种项目,这些项目的存储库位于GitHub中。
现在每个仓库都有基于用户的访问权限,例如用户A仅对A项目具有访问权限,B仅对B项目具有访问权限。
设置了此访问权限(在GitHub中)后,现在每个用户只能对其各自的项目执行git操作(这正是我们想要的)。
现在我想要的是,当用户在各自的项目上执行git操作时,ssh-agent将考虑所有ssh密钥并查找与该特定用户相匹配的那个密钥。
请注意,每个ssh密钥都有一个短语(一个唯一的秘密,每个用户都知道),当执行git功能时提示输入该短语。
为了实现这一点,我们需要执行:
ssh-add /root/.ssh/A

或者

ssh-add /root/.ssh/B

但是正如之前提到的,这只适用于当前的ssh会话退出或者与服务器建立一个新的ssh会话时,ssh-add信息将被丢失。可以通过运行ssh-add -L找到。

我也尝试过像这个问题所描述的,在.ssh/config中定义IdentityFile。

像这样:

Host github.com
        Hostname github.com
        User git
        IdentityFile /root/.ssh/A

Host github.com
        Hostname github.com
        User git
        IdentityFile /root/.ssh/B

这只适用于一个用户(有时对于“A”有效,有时则无效,对于“B”也是如此)

是否可以实现这种分离,或者我听起来有点过于雄心勃勃?

谢谢


你能否编辑你的问题并在最后明确你想要做什么吗?我这样问的原因是很可能有一种简单的方法来解决它,但我们需要知道你的目标。你当前的方法不太好,需要更换! - gahooa
@gahooa编辑,如果还需要进一步编辑,请告诉我。 - Viren
1个回答

6
您在编辑IdentityFile时已经非常接近了。但是,您需要在IdentityFile中列出唯一的主机名。因为您两次都使用github.com作为主机名,所以当您尝试连接到github.com时,它不知道使用哪一个。
我们有一个类似的设置。我们有5个用户,所有用户都登录到一个单独的帐户中。然而,GitHub需要看到他们每个人使用自己的ssh密钥,因此我们有5个密钥。绕过这个问题的关键是使您的文件看起来像这样:
Host UserA_github
        Hostname github.com
        User git
        IdentityFile /root/.ssh/A

Host UserB_github
        Hostname github.com
        User git
        IdentityFile /root/.ssh/B

每当UserB想要进行与 git 相关的操作时(例如克隆他们的存储库之一),他们将运行...

git clone UserB_github:UserB/MyRepo

或类似的东西。这将表现得好像他们已经输入了...
git clone github.com:UserB/MyRepo 

除此之外,它将使用适当的IdentityFile/私钥。

我知道我的解决方案没有使用持久性的ssh-add,但我认为这将给您想要的相同性能。不幸的是,您的用户每次执行事务时都需要输入密码。


当然,从安全角度来看,多个用户共享一个帐户可能并不理想,但有时候这么做是有原因的。 - Daniel Kessler
谢谢,给我几个小时测试一下,然后我肯定会接受这个答案。 - Viren

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