可以全局添加ssh-add

时间:2012-05-26 03:41:54

标签: git ssh github ssh-keys openssh

我可以针对永久保留的 identifyFile 进行 ssh-add ,目前仅针对当前有效的 ssh会话(即identityFile)通过运行ssh-add -L可以找到使用服务器进行新的ssh会话时使用ssh-add添加丢失的内容

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

现在每个回购都有基于用户的访问权限 说用户A仅对项目A具有访问权限 B仅对项目B具有访问权

使用该访问权限设置(在github中)现在每个用户只能执行git操作(如git fetch,git push等)各自的项目(这就是我们想要的)

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

注意

  

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

实现这一目标

ssh-add /root/.ssh/A

ssh-add /root/.ssh/B

但正如之前提到的,这只停留在活动的ssh-session 退出或与服务器进行 new ssh会话ssh -add信息丢失。可以通过运行 ssh-add -L

找到

我也尝试在.ssh / config中定义IdentityFile,就像在此question

中描述的那样

类似这样的事情

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')

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

谢谢

1 个答案:

答案 0 :(得分:4)

您对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 

除了它将使用适当的IdentityFile /私钥。

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