6

我可以对永久保留的identifyFile执行ssh-add,目前它仅适用于当前活动的ssh 会话(即,使用 ssh-add 添加的 identityFile 在与服务器建立新的 ssh 会话时会丢失,可以通过运行 ssh-找到添加 -L )

问题是我们的亚马逊服务器有各种项目,repo 在 github 中。

现在每个 repo 都具有访问权限,用户用户 A 仅对项目 A具有访问权限,而B仅对项目B 具有访问权限

使用该访问权限集(在 github 中),现在每个用户都可以仅对各自的项目执行 git 操作(如 git fetch、git push 等) (这是我们想要的)

现在我想要的是当用户在相应的项目上执行 git 操作时,我希望ssh-agent获取帐户中的所有 ssh-keys 并查找与该特定用户匹配的那个

笔记

每个 ssh-key 都有一个与之关联的短语(每个用户都知道的唯一秘密),在执行 git 功能时提示输入。

为了实现这一点,我们做

ssh-add /root/.ssh/A

或者

ssh-add /root/.ssh/B

但如前所述,这只保留在活动的 ssh-session中,退出或与服务器建立的 ssh 会话 ssh-add info is lost。可以通过运行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”)

这种隔离能否实现,还是我听起来有点过于雄心勃勃

谢谢

4

1 回答 1

7

您对 IdentityFile 的编辑非常接近。但是,您需要在 IdentityFile 中列出唯一的主机名。因为您两次都使用 github.com 作为主机名,所以当您尝试连接到 github.com 时,它不知道该使用哪一个。

我们有类似的设置。我们有 5 个用户,他们都登录到一个帐户。但是,Github 需要看到他们每个人都使用自己的 ssh-key,所以我们有 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 

除了它将使用适当的身份文件/私钥。

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

于 2012-06-05T20:19:19.933 回答