github使用SSH與用戶端串連。如果是單使用者(first),產生金鑰組後,將公開金鑰儲存至github,每次串連時SSH用戶端發送本地私密金鑰(預設~/.ssh/id_rsa)到服務端驗證。單使用者情況下,已連線的服務器上儲存的公開金鑰和發送的私密金鑰自然是配對的。但是如果是多使用者(first,second),我們在串連到second的帳號時,second儲存的是自己的公開金鑰,但是SSH用戶端依然發送預設私密金鑰,即first的私密金鑰,那麼這個驗證自然無法通過。不過,要實現多帳號下的SSH key切換在用戶端做一些配置即可。
首先cd到~/.ssh 使用 ssh-keygen -t -rsa -C ‘second@mail.com’ 產生新的SSH key:id_rsa_second,產生完後將新的SSH public key添加到github。
ssh-keygen -t rsa -C 'second@mail.com'
預設SSH只會讀取id_rsa,所以為了讓SSH識別新的私密金鑰,需要將其添加到SSH agent
ssh-add ~/.ssh/id_rsa_second
該命令如果報錯:Could not open a connection to your authentication agent.無法串連到ssh agent,可執行ssh-agent bash命令後再執行ssh-add命令。
完成以上步驟後在~/.ssh目錄建立config檔案,該檔案用於配置私密金鑰對應的伺服器。內容如下:
# Default github user(first@mail.com)Host github.com HostName github.com User git IdentityFile C:/Users/username/.ssh/id_rsa# second user(second@mail.com)Host github-second HostName github.com User git IdentityFile C:/Users/username/.ssh/id_rsa_second
Host隨意即可,方便自己記憶,後續在添加remote是還需要用到。
配置完成後,在串連非預設帳號的github倉庫時,遠程庫的地址要對應地做一些修改,比如現在添加second帳號下的一個倉庫test,則需要這樣添加:
git remote add test git@github-second:second/test.git #並非原來的git@github.com:second/test.git
這樣每次串連都會使用id_rsa_second與伺服器進行串連。至此,大功告成!
注意:github根據設定檔的user.email來擷取github帳號顯示author資訊,所以對於多帳號使用者一定要記得將user.email改為相應的email(second@mail.com)。
參考github協助文檔:
- http://help.github.com/win-set-up-git/
- http://help.github.com/multiple-ssh-keys/
錯誤說明:
這大多是因為開啟了防火牆造成的。可以關閉防火牆後再試,或者嘗試Http/Https的方式,一般防火牆都不會禁止這種方式。
這個原因比較多,比如:
1. 找不到私密金鑰檔案
2. 私密金鑰產生有誤,比如產生時沒指定類型
需要將伺服器端產生的私密金鑰的格式轉換一下putty才能認。運行PUTTYGEN.EXE,先把ssh-keygen產生的私密金鑰load進去,然後再save private key 就可以了來源: http://omiga.org/blog/archives/2269