我只有一个存储库。我有两个名为“ 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
等单独
如何创建允许ssh登录使用不同用户/电子邮件的git配置?
我的git配置:
ffffffffffff
a0b0c0d0e0f0
a1b1c1d1e1f1
a0a1a2a3a4a5
b0b1b2b3b4b5
4d3a99c351dd
1a982c7e459a
000000000000
d3f7d3f7d3f7
aabbccddeeff
(很抱歉,格式化,不知道如何使VIM插入我的ubuntu os缓冲区。这是另一个问题了)
感谢您的帮助!
对于“堆栈溢出”“重复问题”策略,请参阅下面的文章列表,并解释为什么它们不适用于我的问题。
堆栈溢出不会让我发布我的证明,所以这是它的图片。
答案 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.git
和ssh://git@bitbucket.com/path/to/repo.git
作为两个遥控器的URL(如果愿意,可以使用git@$hostingsite:path
语法,这没什么区别,我就像ssh://
语法我)。分开的遥控器将保持独立,并且您只会告诉Git从每个遥控器中获取或推送到每个遥控器,而只能从每个遥控器中获取或推送到每个遥控器。
从技术上讲,GitHub和Bitbucket都不使用您的电子邮件帐户。嗯,他们俩都使用它-只是发送电子邮件给您,而不是将某些传入数据流标识为“您”。他们还使用它来识别“由您做出的”提交以供显示;但是此类提交可以被其他人注入。
特别是,每当您使用SSH连接到 Bitbucket 或 GitHub时,您都将运行非交互式等效项:
ssh -T git@$hostingsite
其中$hostingsite
是bitbucket.org
或github.com
。这意味着您要这些系统以名为git
的用户身份登录,而不是以您自己的身份登录!那么他们怎么知道你是你?
以下描述假定整个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
,因此链接的问题中的版本较长。