1. 程式人生 > 其它 >Git配置SSH Key(Git配置多個賬戶)

Git配置SSH Key(Git配置多個賬戶)

敲程式碼的小松鼠

Git配置SSH Key(Git配置多個賬戶)

# 前言

一般地,都會安裝好Git後直接設定一個全域性的config資訊,如下:

git config --global user.name "yyc" // 配置全域性使用者名稱,如 Github 上註冊的使用者名稱
git config --global user.email "[email protected]" // 配置全域性郵箱,如 Github 上配置的郵箱

但是有時候會遇到這樣的問題:

場景一:將同一個專案託管在多個平臺(Coding、GitHub、GitLab等)時,可能無法滿足需求,因為這兩個平臺不僅倉庫地址不一樣,並且賬戶名和密碼都是不同的。例如,我在github pages上面搭建的個人部落格,在國內訪問太慢,我需要將這個專案同時託管到Coding上,然後雙線部署到coding和github pages上。

場景 二:本地有兩個專案,分別使用不同的託管平臺。比如專案一使用GitHub託管,專案二使用GitLab託管。

本文配置GitHub一個賬戶,多個賬戶的配置方法相同。

# 配置SSH Key

# 清除全域性配置

在正式配置之前,我們先得把全域性配置給清除掉(如果你配置過的話),執行以下命令可以列出所有已經配置的全域性配置 :

git config --global --list

發現其中有 user.nameuser.email 資訊,請執行以下命令將其清除掉:

git config --global --unset user.name
git config --global --unset user.email

# 生成金鑰對

鑰對的儲存位置預設在 ~/.ssh 目錄(Windows 10系統在C盤User資料夾)下,我們先清理下這個目錄中已存在的鑰對資訊,即刪除其中的 id_rsaid_rsa.pub 之類的公鑰和金鑰檔案。注意:windows應該切換到~/.ssh/目錄下執行。

首先我們開始生成 github 上的倉庫鑰對,通過 -C 引數填寫 github 的郵箱:

ssh-keygen -t rsa -C “[email protected]

回車後會提示Enter file in which to save the key,在這裡輸入公鑰的名字(預設為 id_rsa),這裡輸入 id_rsa_github

。輸入完畢後,一路回車,鑰對就生成完畢了。注意:需要配置多個賬戶的話,一定要自己輸入名字,以免被覆蓋

回車後系統將提示您輸入密碼以保護您的新 SSH 金鑰對。最好使用密碼,但也可以不需要密碼,一般就按兩次回車來跳過建立密碼。

# 新增 SSH Keys

id_rsa_github.pub 中的內容新增到 github的 SSH Keys 中,這個需要直接到網頁上設定裡面操作(點頭像-->setting)。可以使用命令先將檔案中的內容複製到貼上板:

cat ~/.ssh/id_rsa_github.pub | clip

# 新增私鑰

在上一步中,我們已經將公鑰新增到了 github伺服器上,我們還需要將私鑰新增到本地中,不然無法使用。新增命令也十分簡單,如下:

ssh-add ~/.ssh/id_rsa_github

新增完畢後,可以通過執行 ssh-add -l 命令驗證下。

執行ssh-add時出現Could not open a connection to your authentication agent,則應先執行如下命令即可:

eval $(ssh-agent -s)

或者

ssh-agent bash

更多關於ssh-agent的細節,可以用 man ssh-agent 來檢視 。

# 管理金鑰

通過以上步驟,公鑰、金鑰分別被新增到 git 伺服器和本地了。下面我們需要在本地建立一個金鑰配置檔案,通過該檔案,實現根據倉庫的 remote 連結地址自動選擇合適的私鑰。

編輯 ~/.ssh 目錄下的 config 檔案,如果沒有,請建立。

配置內容如下:

Host github
HostName github.com
User yyc007
IdentityFile ~/.ssh/id_rsa_github

Host coding
HostName e.coding.net
User yyc007
IdentityFile ~/.ssh/id_rsa_coding


該檔案分為多個使用者配置,每個使用者配置包含以下幾個配置項:

  • Host:倉庫網站的別名,隨意取
  • HostName:倉庫網站的域名(PS:IP 地址應該也可以)
  • User:倉庫網站上的使用者名稱
  • IdentityFile:私鑰的絕對路徑

可以用 ssh -T 命令檢測下多個倉庫配置的 Host或HostName 是否是連通的:

ssh -T git@github

或者

ssh -T [email protected]

完成以上配置後,已經基本完成了所有配置。分別進入附屬於 github 和 coding的倉庫,此時都可以進行 git 操作 (或者可以對同一個專案分別操作兩個不同的遠端Git倉庫)。

# 為倉庫單獨配置使用者名稱資訊

完成以上配置後,其實已經基本完成了所有配置。但是如果你此時提交倉庫修改後,你會發現提交的使用者名稱變成了你的系統主機名。

這是因為 git 的配置分為三級別,System —> Global —>Local。System 即系統級別,Global 為配置的全域性,Local 為倉庫級別,優先順序是 Local > Global > System。

因為我們並沒有給倉庫配置使用者名稱,又在一開始清除了全域性的使用者名稱,因此此時你提交的話,就會使用 System 級別的使用者名稱,也就是你的系統主機名了。

因此我們需要為每個倉庫單獨配置使用者名稱資訊,假設我們要配置 github 的某個倉庫,進入該倉庫後,執行:

git config --local user.name "yyc"
git config --local user.email "[email protected]"

執行完畢後,通過以下命令檢視本倉庫的所有配置資訊:

git config --local --list

至此你已經配置好了 Local 級別的配置了,此時提交該倉庫的程式碼,提交使用者名稱就是你設定的 Local 級別的使用者名稱了。

本文轉自 https://ladybug.top/Git/git-multi-user-account-configuration---configure-SSH-key.html#前言,如有侵權,請聯絡刪除。