【问题标题】:SSH single repo different remotes different git hosts different users/emails/passwordsSSH 单一仓库 不同的远程 不同的 git 主机 不同的用户/电子邮件/密码
【发布时间】:2018-12-11 01:34:31
【问题描述】:

我有一个存储库。我有两个名为:Origin 和 Remote Origin指向github,Remote指向bitbucket。我的github账号登录使用我的个人邮箱******@gmail.com,我的bitbucket账号使用我的工作邮箱账号******@ca****et.com。

Atlassian 和 github 都有我的 ssh 密钥,我的 ssh 密钥已链接并正常工作,它们位于不同的文件 id_rsa、id_rso 中。

我希望能够git push remote master:development 和分开,而不是同时(不想同步)git push origin master:master 等。

如何创建允许不同用户/电子邮件进行 ssh 登录的 git 配置?

我的 git 配置:

[user]
  1 »»»»»»»»email = leaf466@gmail.com
  2 »»»»»»»»name = Serafin Wesnidge
  3 [core]
  4 »»»»»»»»editor = vim
  5 »»»»»»»»pager = diff-so-fancy | less --tabs=4 -RFX
  6 »»»»»»»»excludesfile = /home/user386/.gitignore_global
  7 [push]
  8 »»»»»»»»default = simple

(抱歉格式化,不知道如何让 VIM 拉入我的 ubuntu os 缓冲区。这是另一个问题)

感谢您的帮助!

对于 Stack Overflow“重复问题”警察,请参阅下面我阅读的文章列表以及它们为何不适用于我的问题的解释。

堆栈溢出不允许我发布我的证明,所以这是它的图像。

【问题讨论】:

    标签: git github ssh bitbucket


    【解决方案1】:

    首先,安排您的 ssh 命令将您的“GitHub 身份”(实际上是:密钥)发送到 GitHub,并将您的“Bitbucket 身份”发送到 Bitbucket。这意味着您的 ssh 配置1(不是 Git 配置!)将包括:

    Host github.com
            IdentityFile ~/.ssh/id_rso
            IdentitiesOnly yes
    

    (最后一行不是必需的,但这是个好主意)和:

    Host bitbucket.org
            IdentityFile ~/.ssh/id_rsa
            IdentitiesOnly yes
    

    (假设我这里的 ID 文件是正确的)。然后使用ssh://git@github.com/path/to/repo.gitssh://git@bitbucket.com/path/to/repo.git 作为您的两个遥控器的URL(如果您愿意,可以使用git@$hostingsite:path 语法,这没有区别,我自己就是喜欢ssh:// 语法)。单独的遥控器将保持独立,您只会在您告诉 Git 从每个遥控器获取或推送到每个遥控器时从每个遥控器获取或推送到每个遥控器。

    技术说明

    从技术上讲,GitHub 和 Bitbucket 都不会使用您的电子邮件帐户。好吧,他们都使用它——但向您发送电子邮件,而不是将某些传入数据流识别为“您”。他们还使用它来识别“由您进行”的提交以用于显示目的;但是这样的提交可以被其他人注入

    特别是,每当您使用 SSH 连接到任一 Bitbucket GitHub 时,您都会运行以下非交互式等效项:

    ssh -T git@$hostingsite
    

    其中$hostingsitebitbucket.orggithub.com。这意味着您要求这些系统以名为git 的用户身份登录,而不是您自己!那么他们怎么知道你是你呢?

    本次讨论的其余部分实际上是关于 Gitolite 的工作原理


    下面的描述假设对整个 authorized_keys 文件进行线性扫描,这对于繁忙的 Bitbucket 和 GitHub 服务器来说可能太慢了。不过,原则应该是一样的。 Gitolite 系统实际上就是这样工作的,以便在未经修改的 Unix / Linux 服务器上工作。


    用户git,在这些系统上,不允许做太多事情。但是,该特定用户有一个很长的 authorized_keys 文件,而不是通常的 ssh-rsa AAAA... 行,以以下开头的行:2

    restrict,command="<path>/gl-auth-command <user>" ssh-rsa AAAA...
    

    当机器上的sshd 服务器接受传入的密钥并将其与存储在用户gitauthorized_keys 文件中的公钥匹配时,此受限且特殊的命令行使其运行其他东西比通用外壳。在这个特定的示例中,我们提供了 Gitolite 授权步骤的路径,并且 用户 ssh 的名称刚刚基于此密钥进行了授权

    您的 Git 发送的运行 git upload-pack 或类似请求的请求保存在环境变量 ($ORIGINAL_SSH_COMMAND) 中。因此,刚刚运行的实际命令知道让你进入的密钥是谁的,以及你要求执行的 Git 操作(如果你要求做一个 - 如果没有,你会得到“成功授权, 但是”$hostingsite 打印的消息)。

    Running a “secure” git server over SSH without gitosis/gitolite?this superuser.com Q&A 中有更多讨论。


    1ssh 配置文件通常命名为$HOME/.ssh/config

    2我在这里使用restrict,而不是费力地列举所有要禁用的 ssh 功能。我认为一些较旧的 sshd 版本不支持restrict,因此链接问题中的版本较长。

    【讨论】:

    • Bitbucket 让您可以根据需要使用自己的用户名而不是“git@bitbucket.org”进行推送或拉取。此外,GitHub 和 Bitbucket 都使用每个提交的作者信息将该提交与 GH/BB 用户帐户相关联。
    • @JimRedmond:啊,我实际上没有使用 Bitbucket;我见过的例子(包括在他们自己的网站上)建议在 ssh 中使用git@bitbucket。关于将提交归因于网络图的作者的观点当然是有效的,我应该把它放进去。
    • 这对我有用。经过几天的寻找终于。太感谢了!需要注意的一件事:我一直将Hosts github.com 信息放入我的.gitconfig,最后发现我应该将它放入我的~/.ssh/ 目录中的一个名为“config”的文件中。一直以来...非常感谢您的解释。我假设我的名字是必需的,这让我很反感,让我忽略了其中一个“可能重复的帖子”帖子。
    • Aww .. 现在我遇到了 Git Kraken 中的问题(因此我假设在我的 github 上)我的提交没有得到信用(这对于在未来) - 我该如何解决这个问题?还是我应该简单地将其作为一个全新的问题发布?
    • @Numerals:是的,单独的问题。 GitHub(不确定 Bitbucket)有一种奇特的方法可以将提交中的 &lt;user@host&gt; 关联到“用户”,尽管最简单的方法是匹配您的 GitHub 用户名的电子邮件地址。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多