多個git託管平臺同時使用時SSH Key的生成及新增
使用一個郵箱註冊多個git程式碼託管平臺,如:GitHub、Gitlab、碼雲等。在使用者端,生成對應平臺的的 SSH Key
時,會生成對應的 id_rsa
及 id_rsa.pub
公鑰檔案(預設的金鑰檔名取決於演算法,此處預設使用RSA演算法加密),然後在對應的平臺上新增使用者生成的 SSH Key
即可,下文將在此基礎延伸多個git託管平臺使用時,對應的多個祕鑰生成及新增。
單個平臺SSH key生成及新增
Windows下需要在 git bash
命令列視窗(也可使用 cmder
),按照下面命令,來生成對應託管平臺的 SSH Key
。
ssh-keygen -t rsa -C "對應平臺註冊的郵箱地址"
命令列輸出類似如下訊息
$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in gitee_id_rsa.
Your public key has been saved in gitee_id_rsa.pub.
The key fingerprint is:
SHA256:t86b0RbwMYAVdqGwUQXkuS3ZnL1u4UJBgfjrK7TJkKY [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| o*O==o |
| o*.=. |
| ..=.o |
| .O.= |
| .S =.B.. |
| + ...+.... |
| o + +o.o... |
| E =o.+..o |
| .*o o. |
+----[SHA256]-----+
此時在 ~/.ssh
目錄下會生成 id_rsa
及 id_rsa.pub
.ssh 目錄在對應使用者的根目錄下,即 :
C:\Users\當前使用者名稱\.ssh
然後將 id_rsa.pub
檔案的內的 SSH Key
新增到對應的平臺(此處以GitHub為例)
設定內後,通過命令進行驗證
ssh -T [email protected]
注意, 此處[email protected]後新增對應平臺的主域名,如Github的github.com,碼雲的gitee.com。
如果上面命令新增執行後,命令列輸出類似內容
Hi yourname(此處為對應git平臺的使用者名稱)! You've successfully authenticated...
或
Welcome to xxx.com, yourname(此處為對應git平臺的使用者名稱)!...
則表示對應平臺的SSH key生成及部署成功。
否則,
- 檢查對應的key是否貼上正確
- 檢查操作步驟是否正確
- Try again ~~~
如出現添加了公鑰後仍然無法推送程式碼,則可以參看此處
注意: 要使用SSH連結操作遠端倉庫,Git的Remote要使用SSH地址,關於Remote使用見這裡
多平臺SSH key生成部署
類似單平臺SSH Key的建立,多個平臺生成命令做如下調整:
ssh-keygen -t rsa -C "平臺註冊的郵箱地址" -f "生成的rsa檔名"
注意:
-f
後面帶的檔名稱,不含路徑,則生成在當前命令列路徑內所在的目錄下。更多工具ssh-keygen
的命令說明及使用見此處
通過此命令,依次生成兩個平臺的key
$ ssh-keygen -t rsa -C "[email protected]" -f "github_id_rsa"
$ ssh-keygen -t rsa -C "[email protected]" -f "gitee_id_rsa"
# Generating public/private rsa key pair...
# 三次回車即可生成 ssh key
此時 ~/.ssh
目錄下,生成的檔案如下
此時對應的SSH Key生成成功,具體新增平臺的步驟參看上文,新增完成進行驗證時,出現如下提示:
$ ssh -T [email protected]
The authenticity of host 'gitee.com (218.11.0.86)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,218.11.0.86' (ECDSA) to the list of known hosts.
Permission denied (publickey).
此時可以參看 Windows下由於SSH配置檔案的不匹配,導致的Permission denied (publickey)及其解決方法
文章內說建立config檔案,結合參考文章 【工具安裝和配置】 GIT同時連線gitlab和githubstrong text 嘗試後,未解決問題。
此處解決,使用 ssh-agent
工具,更多關於此工具的說明見此處。
ssh-agent解決Permission denied (publickey)問題
- 首先確定工具是否可以使用
$ eval `ssh-agent`
## 控制檯輸出類似下面內容,表示該工具可以使用(結果輸出為工具的程序PID)
# Agent pid 7488
注意: Windows系統下需在
git bash
或cmder
命令列介面下操作
- 使用
ssh-add
工具將SSH Key
新增到ssh-agent
# 新增GitHub的SSH Key
$ ssh-add C:/Users/xxx/.ssh/github_id_rsa
# 新增碼雲的SSH Key
$ ssh-add C:/Users/xxx/.ssh/gitee_id_rsa
## 此時可能需要輸入生成SSH Key時配置的密碼(如果有設定的話),成功後輸出類似以下內容
# Identity added: C:/Users/xxx/.ssh/github_id_rsa (C:/Users/xxx/.ssh/github_id_rsa)
# Identity added: C:/Users/xxx/.ssh/gitee_id_rsa (C:/Users/xxx/.ssh/gitee_id_rsa)
如出現類似下面提示:
$ ssh-add C:\Users\xxx\.ssh\gitee_id_rsa
Could not open a connection to your authentication agent.
可以使用 ssh-agent bash --login -i
命令來啟動 ssh-agent
- 最後使用
ssh -T [email protected]
命令驗證Key是否新增成功
關於SSH的更多命令可以檢視此處
雖然通過上面操作可以使用ssh連線多個git平臺,但使用git工具 TortoiseGit
進行提交時,依舊會出現 Please make sure you have the correct access rights and the repository exists.
的提示,此時在bash控制檯通過 git push
命令則正常提交。。。 此問題待解決,有知道怎麼處理的朋友,希望可以告知。