簡體   English   中英

SSH單個存儲庫不同的遠程服務器不同的git托管不同的用戶/電子郵件/密碼

[英]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:developmentgit push remote master:development分開,而不是同時(不想同步) git push origin master:master等。

如何創建允許ss​​h登錄使用不同用戶/電子郵件的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.gitssh://git@bitbucket.com/path/to/repo.git作為兩個遙控器的URL(您可以使用git@$hostingsite:path語法(如果您願意),這沒有什么區別,我自己也喜歡ssh://語法)。 單獨的遙控器將保持獨立,並且您僅會告訴Git從每個遙控器獲取或推送到每個遙控器,否則您只能從每個遙控器獲取或推送到每個遙控器。

技術說明

從技術上講,GitHub和Bitbucket都不使用您的電子郵件帳戶。 好吧,他們倆都使用它,但是只是向您發送電子郵件 ,而不是將某些傳入的數據流標識為“您”。 他們還使用它來識別“由您做出的”提交以供顯示; 但是此類提交可以由其他人注入

特別是,當你使用SSH連接到任何到位桶 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文件中存儲的公鑰進行匹配時,此受限和特殊命令行使它運行的不是通用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM