ssh-add 可以全局添加吗

Vir*_*ren 6 git ssh openssh github ssh-keys

我可以做的ssh-ADDidentifyFile那相依相偎,目前它仅盛行的当前活动SSH会话(即identityFile当使用新的SSH会话与服务器建立可以通过运行SSH-发现SSH-ADD迷路添加添加 -L )

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

现在回购每个人都有正确的基础上,用户的访问 说,用户右只能访问项目AB对B项目的访问权限

有了这个访问权限集(在 github 中),现在每个用户只能对各自的项目(这是我们想要的)执行 git 操作(如 git fetch、git push 等)

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

笔记

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

为了实现这一点,我们做

ssh-add /root/.ssh/A
Run Code Online (Sandbox Code Playgroud)

或者

ssh-add /root/.ssh/B
Run Code Online (Sandbox Code Playgroud)

但如前所述,这仅适用于活动的 ssh-session退出或与服务器建立新的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
Run Code Online (Sandbox Code Playgroud)

这仅适用于一个用户(有时适用于“A”,有时不适用于“B”)

这种隔离可以实现还是我听起来有点过于雄心勃勃

谢谢

Dan*_*ler 7

您对 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
Run Code Online (Sandbox Code Playgroud)

每当UserB想做一些与 git 相关的事情时(例如克隆他们的存储库之一),他们就会运行......

git clone UserB_github:UserB/MyRepo
Run Code Online (Sandbox Code Playgroud)

或类似的东西。这将表现得好像他们已经进入......

git clone github.com:UserB/MyRepo 
Run Code Online (Sandbox Code Playgroud)

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

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