git - 可以全局添加ssh-add吗

标签 git ssh github ssh-keys openssh

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

问题是我们的amazon服务器有各种项目,repo在github上。

现在每个仓库都有基于用户的访问权限 假设用户A仅对项目A具有访问权限并且B对项目B具有访问权限

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

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

注意

that each ssh-key has a phrases(a unique secret know to each user there own) associated with it, prompted to enter when perform git function.

为了实现这一目标,我们做到了

ssh-add /root/.ssh/A

ssh-add /root/.ssh/B

但是正如前面提到的,这只会在 active ssh-sessionexit 或与服务器建立一个 new ssh ssh ssh session - 添加信息丢失。可以通过运行 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”无效,同样适用于“B”)

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

谢谢

最佳答案

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

我们有类似的设置。我们有 5 个用户,他们都登录到一个帐户。然而,Github 需要看到他们每个人都使用自己的 ssh-key,所以我们有 5 个 key 。解决这个问题的技巧是让你的文件看起来像这样

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 但我认为这将为您提供您想要的相同性能。遗憾的是,您的用户每次执行交易时都需要输入密码。

关于git - 可以全局添加ssh-add吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763410/

相关文章:

git: merge 分支但保留提交历史

git - 错误 : RPC failed; HTTP 503 curl 22 The requested URL returned error: 503

linux - Git remote 尝试以我当前的本地用户身份连接到我的服务器

git - merge 时,Git 是否只考虑提交的时间戳而不考虑它属于哪个分支?

Git 子树。为什么我不能从子树而不是根分支?

android - 如何在android studio中添加Git项目

git - 如何解决 "Port number ended with ' y'"的 url 错误?

windows - 带密码的 ssh key 突然*不*要求我输入密码

linux - 使用 ssh 远程执行脚本的安全方法

java - .gitignore 文件在 git 推送期间不会忽略某些文件?