題 我可以為同一主機和用戶使用多個SSH密鑰嗎?


我在Bitbucket上有兩個帳戶,每個帳戶都有一個SSH密鑰。這是我的 ~/.ssh/config 好像:

Host bitbucket.org
  User git
  IdentityFile ~/.ssh/bitbucket/account1

Host bitbucket.org
  User git
  IdenfityFile ~/.ssh/bitbucket/account2

問題是SSH代理似乎無法同時處理同一主機的兩個密鑰,我必須刪除其中一個才能使用另一個。

有解決方法嗎?


4
2018-03-28 21:43


起源




答案:


從它的外觀來看,Bitbucket有一個通配符DNS條目;任何隨機子域(*.bitbucket.org)將解析為相同的服務器 bitbucket.org

$ host bitbucket.org
bitbucket.org has address 207.223.240.182
bitbucket.org has address 207.223.240.181
$ host random.bitbucket.org
bitbucket.org has address 207.223.240.182
bitbucket.org has address 207.223.240.181
$ host clearlynotasubdomain.bitbucket.org
bitbucket.org has address 207.223.240.182
bitbucket.org has address 207.223.240.181

因此,您可以在自己的設置中設置不同的條目 ~/.ssh/config 使用不同的主機名:

Host project1.bitbucket.org
  User git
  IdentityFile ~/.ssh/bitbucket/account1

Host project2.bitbucket.org
 User git
 IdenfityFile ~/.ssh/bitbucket/account2

事實上,我冒昧地猜測Bitbucket為了這個目的而擁有這個通配符。


8
2018-03-28 21:50





您可以創建兩個單獨的SSH別名,即

Host bitbucket1
  Hostname bitbucket.org
  User git
  IdentityFile ~/.ssh/bitbucket/account1

Host bitbucket2
  Hostname bitbucket.org
  User git
  IdentityFile ~/.ssh/bitbucket/account2

只要你的IdentityFile不是默認的(參見 我的問題在這裡),然後您可以使用這些別名來選擇要連接的帳戶。


7
2018-03-28 21:48



這是一個比Rain的答案更好,更通用的ssh-native友好解決方案。 Rain的答案僅適用於bitbucket的DNS配置方式。請注意,通過eldering的答案,您只需鍵入即可 ssh bitbucket1 要么 ssh bitbucket2 連接。您的主機名設置 .ssh/config 為您處理主機名。 - Doug Harris
@DougHarris我同意;我沒有意識到這個功能。 - Rain
所以,你試試 ssh bitbucket1,如果失敗了,你再試一次嗎?或者然後立即嘗試 ssh bitbucket2 看看是否連接?這個答案似乎比@Rain的答案更多的問題/含糊不清。 - killermist
@killermist:不,你用 ssh bitbucket1 連接到account1(反之亦然,用於account2)。 Bitbucket根據您用於連接的SSH密鑰確定您的帳戶。關鍵是這條線 Host X 確定主持人 別號,不一定是真正的主機名;由...指定 Hostname 在條目內。 - Jaap Eldering