SSH单个回购协议不同的远程服务器不同的git托管不同的用户/电子邮件/密码

时间:2018-07-02 19:35:19

标签: git github ssh bitbucket

我只有一个存储库。我有两个名为“ 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[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 等单独

如何创建允许ss​​h登录使用不同用户/电子邮件的git配置?

我的git配置:

ffffffffffff
a0b0c0d0e0f0
a1b1c1d1e1f1
a0a1a2a3a4a5 
b0b1b2b3b4b5
4d3a99c351dd 
1a982c7e459a
000000000000 
d3f7d3f7d3f7
aabbccddeeff

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

感谢您的帮助!

对于“堆栈溢出”“重复问题”策略,请参阅下面的文章列表,并解释为什么它们不适用于我的问题。

堆栈溢出不会让我发布我的证明,所以这是它的图片。

enter image description here

1 个答案:

答案 0 :(得分:2)

首先,安排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服务器接受输入密钥并将其与用户git的{​​{1}}文件中存储的公钥进行匹配时,此受限和特殊命令line使它运行的不是通用shell。在此特定示例中,我们提供了通往Gitolite授权步骤的路径,以及用户ssh刚刚根据此密钥授权的名称

您的Git发送的运行authorized_keys或类似请求的请求将保留在环境变量(git upload-pack)中。因此,实际运行的命令知道其密钥是让您进入,以及您要执行的Git操作(如果您要执行的操作,如果没有,您将获得“成功授权,但显示“ $ORIGINAL_SSH_COMMAND打印的消息”。

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


1 ssh配置文件通常命名为$hostingsite

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