敲代碼的小松鼠
Git配置SSH Key(Git配置多個賬戶)
# 前言
一般地,都會安裝好Git后直接設置一個全局的config信息,如下:
git config --global user.name "yyc" // 配置全局用戶名,如 Github 上注冊的用戶名
git config --global user.email "34782655@qq.com" // 配置全局郵箱,如 Github 上配置的郵箱
但是有時候會遇到這樣的問題:
場景一:將同一個項目托管在多個平台(Coding、GitHub、GitLab等)時,可能無法滿足需求,因為這兩個平台不僅倉庫地址不一樣,並且賬戶名和密碼都是不同的。例如,我在github pages上面搭建的個人博客,在國內訪問太慢,我需要將這個項目同時托管到Coding上,然后雙線部署到coding和github pages上。
場景 二:本地有兩個項目,分別使用不同的托管平台。比如項目一使用GitHub托管,項目二使用GitLab托管。
本文配置GitHub一個賬戶,多個賬戶的配置方法相同。
# 配置SSH Key
# 清除全局配置
在正式配置之前,我們先得把全局配置給清除掉(如果你配置過的話),執行以下命令可以列出所有已經配置的全局配置 :
git config --global --list
發現其中有 user.name
和 user.email
信息,請執行以下命令將其清除掉:
git config --global --unset user.name
git config --global --unset user.email
# 生成密鑰對
鑰對的保存位置默認在 ~/.ssh
目錄(Windows 10系統在C盤User文件夾)下,我們先清理下這個目錄中已存在的鑰對信息,即刪除其中的 id_rsa
、id_rsa.pub
之類的公鑰和密鑰文件。注意:windows應該切換到~/.ssh/目錄下執行。
首先我們開始生成 github 上的倉庫鑰對,通過 -C
參數填寫 github 的郵箱:
ssh-keygen -t rsa -C “34782655@qq.com”
回車后會提示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 git@github.com
完成以上配置后,已經基本完成了所有配置。分別進入附屬於 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 "34782655@qq.com"
執行完畢后,通過以下命令查看本倉庫的所有配置信息:
git config --local --list
至此你已經配置好了 Local 級別的配置了,此時提交該倉庫的代碼,提交用戶名就是你設置的 Local 級別的用戶名了。
本文轉自 https://ladybug.top/Git/git-multi-user-account-configuration---configure-SSH-key.html#前言,如有侵權,請聯系刪除。