[英]SSH single repo different remotes different git hosts different users/emails/passwords
我只有一個存儲庫。 我有兩個名為Remote的遠程對象: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 remote master:development
分開,而不是同時(不想同步) git push origin master:master
等。
如何創建允許ssh登錄使用不同用戶/電子郵件的git config?
我的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緩沖區。這是另一個問題。)
謝謝您的幫助!
對於“堆棧溢出”“重復問題”策略,請參閱下面的文章列表,以及為什么它們不適用於我的問題的說明。
堆棧溢出不會讓我發布我的證明,所以這是它的圖像。
首先,安排您的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連接到任何到位桶或 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
的authorized_keys
文件中存儲的公鑰進行匹配時,此受限和特殊命令行使它運行的不是通用shell。 在此特定示例中,我們既提供了通往Gitolite授權步驟的路徑,又提供了根據該密鑰剛剛授權的用戶ssh的名稱 。
您的Git發送的運行git upload-pack
或類似請求的請求保存在一個環境變量( $ORIGINAL_SSH_COMMAND
)中。 因此,實際運行的命令會知道讓您進入的密鑰以及您要求執行的Git操作(如果要求執行一項操作-如果未執行,則會獲得“成功授權,但”消息,即$hostingsite
打印)。
在沒有gitosis / gitolite的情況下通過SSH運行“安全” git服務器還有其他討論? 以及在此superuser.com問答中 。
1 ssh配置文件通常名為$HOME/.ssh/config
。
2我在這里使用restrict
而不是費力地枚舉要禁用的所有ssh功能。 我認為某些較早的sshd版本不支持restrict
,因此鏈接的問題中的版本較長。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.