2013-02-03 36 views
2

短的版本:如何設置來自同一個ssh客戶端的兩個獨立GitHub賬戶的身份驗證?

有沒有辦法從一個Linux的帳戶設置自動基於公鑰-ssh認證兩個不同的Github上的帳戶?


我有兩個Github上的帳戶,一個一個的工作和個人之一,我想保持完全獨立。

我已經在我的工作Github帳戶中設置了自動SSH身份驗證(使用我的〜/ .ssh/id_rsa.pub)。它工作正常。

當我嘗試向我的個人Github帳戶添加相同的ssh密鑰時,出現「密鑰已被使用」的錯誤消息。

編輯:好的,我想那個人可以通過~/.ssh/config中的適當設置來做我想做的事情,但我還沒有弄清楚這些應該是什麼。首先,我不清楚如何爲同一主機(github.com)指定兩個不同的身份驗證詳細信息(UserIdentityFile),並且一旦我這樣做,我就不會知道git如何知道在兩個密鑰中哪一個顯示時我做git push

回答

2

您需要創建兩組(公鑰/私鑰),每個賬號一個。

您可以參考他們通過SSH的配置文件,如「GitHub: Multiple account setup」/

#Account one 
Host github.com 
    HostName github.com 
    PreferredAuthentications publickey 
    IdentityFile /c/Users/yourname/.ssh/id_rsa 
    User git 

#Account two 
Host ac2.github.com 
    HostName github.com 
    PreferredAuthentications publickey 
    IdentityFile /c/Users/yourname/.ssh/id_rsa_ac2 
    User git 
+0

謝謝!我還不清楚的是,AFAIK,對於我的賬戶來說,主機是一樣的:github.com。我不知道如何獲得兩個不同的主機(如「github.com」和「ac2.github.com」)。發生在我身上的一種可能性是這些字符串是任意的(例如,可以使用「foo」和「bar」代替),但是我不知道如何告訴git使用哪些「幻想」主機名,因爲我知道告訴git關於repo的主機名的唯一地方是在.git/config的url字段中,並且將'git @ foo:this/that'放入該字段是沒有意義的... – kjo

+0

@kjo the 「主機名」相同,而不是「主機」。因此ssh地址不同:'github.com:myrepo'與'ac2.github.com:myrepo'。 – VonC

0

詳細看來GitHub上不允許有兩個倉庫相同的RSA密鑰。

至於解決辦法,你要爲每個站點創建單獨的RSA密鑰:

ssh-keygen -t rsa -f rsa_site1 
ssh-keygen -t rsa -f rsa_site2 

這將生成私鑰和公鑰。然後將公鑰添加到GitHub中以部署密鑰。

那麼你的私鑰部署到遠程:

cat rsa_site1 | ssh [email protected] "cat > ~/.ssh/rsa_site1 && chmod 600 ~/.ssh/rsa_site1" 
cat rsa_site2 | ssh [email protected] "cat > ~/.ssh/rsa_site2 && chmod 600 ~/.ssh/rsa_site2" 

和服務器上獲取你的私人資料庫,你可以使用類似:

ssh [email protected] 'ssh-agent sh -c '\''cd /webroot/site1 && ssh-add ~/.ssh/rsa_site1 && git fetch [email protected]:priv/site1.git'\' 
ssh [email protected] 'ssh-agent sh -c '\''cd /webroot/site2 && ssh-add ~/.ssh/rsa_site2 && git fetch [email protected]:priv/site2.git'\'