前言
本人搞了兩個 GitHub 賬號,一個用來正常的和別人合作項目,另一個用來自己寫一些代碼,希望能做到兩個本地賬戶和遠程賬號都完全隔離,沒有聯(lián)系,也不會被混淆使用。
但是這樣就會有一個問題,設(shè)置本地用戶 user.email
時候,如果兩個 GitHub
賬號倉庫使用同一個本地用戶, GitHub
會將本地的用戶自動與相應的 GitHub
賬號關(guān)聯(lián)起來,這樣在 commit
記錄里面就能看到是誰提交的了,這是我不想看到的結(jié)果。
最開始以為只要把同一個 SSH
公鑰分別添加到兩個 GitHub
賬戶,再在不同的倉庫設(shè)置不同的 user.name
和 user email
就 OK 了. 并不行,每個公鑰只能用一次。然后就考慮生成兩個密鑰,分別添加到不同的賬戶,但是電腦在連接遠程倉庫時,只能默認選擇其中固定的一個來連接,并不會根據(jù)不同倉庫的設(shè)置選擇不同的密鑰,結(jié)果就是還是只能免密連接一個 GitHub
賬戶的倉庫。
你所使用的 SSH
密鑰決定了你是否有權(quán)限訪問某一個 GitHub
賬號下面的倉庫,而你本地倉庫設(shè)置的 use email
決定了在 GitHub
的 commit
記錄中的用戶,而一般在沒有進行以下配置的情況下,你的電腦只會默認使用一個 SSH
密鑰進行連接,這就導致了你只能訪問一個 GitHub
賬號。
如果訪問另一個 Github
賬戶,在 push
時就會報如下錯誤:

下面將詳細介紹方法:
假設(shè)現(xiàn)有兩個賬號分別如下: 一個賬號名為 99Young99
、另一個為 CS-Research-alliance


注: 這里舉例實現(xiàn)在相同的平臺 Github 不同賬號使用不同的 SSH,也可以用相同的方法,在不同的平臺使用不同的 SSH
1. 生成密鑰
首先是先生成兩個 SSH
密鑰,對應兩個身份(假設(shè)為 99Young99
和 CS-Research-alliance
)。
1.1 檢查是否已經(jīng)有 SSH-Key
打開 Git bash
(Linux 中需要打開 Shell),進入 ~/.ssh
目錄,通過命令看看電腦上有 SSH-Key
的相關(guān)文件沒!
cd ~/.ssh
ls
如果顯示 id_rsa
和 id_rsa.pub
文件,說明已經(jīng)有 SSH Key
了。如果沒有,那么根據(jù)下面步驟 生成一個!
1.2 生成一個(或多個)SSH-Key
生成一個 Github
用的 SSH-Key
,其中 github_id_rsa
為密鑰的文件名,~/.ssh/github_id_rsa
為密鑰目錄位置:
ssh-keygen -t rsa -C "youremail@example.com" -f ~/.ssh/github_id_rsa
利用上述命令,生成了一對秘鑰 github_id_rsa
和 github_id_rsa.pub
, 保存在了 ~/.ssh
文件夾內(nèi)。

生成另一個 SSH-Key
,其中 Othergithub_id_rsa
為密鑰的文件名,~/.ssh/Othergithub_id_rsa
為密鑰目錄位置:
ssh-keygen -t rsa -C "private_email@example.com" -f ~/.ssh/Othergithub_id_rsa
這時候要特別注意 -f ~/.ssh/Othergithub_id_rsa
用于重命名,否則會覆蓋上面的密鑰文件。假設(shè)生成了一對新的秘鑰 Othergithub_id_rsa
和 Othergithub_id_rsa.pub
。
然后分別將這兩對密鑰加入到對應的 GitHub
賬戶中。
本章產(chǎn)生的兩個密鑰案例如下:
2. 編輯配置文件
編輯 ~/.ssh/config
文件。如果該文件不存在的話,直接創(chuàng)建一個就好(通過 touch
命令新建 config
文件,并用 vim
編輯器打開 config
文件)。
不同 Host
實際映射到同一 HostName
,但密鑰文件不同。Host
前綴可自定義,例子中 99Young99
分步解釋
Host 99Young99.github.com (自定義的 Host 簡稱,以后連接遠程服務(wù)器就可以用 99Young99.github.com 代替 HostName 的 github.com, 相當于網(wǎng)站的別名,隨意取,并且可以去掉 github.com 直接取名為 99Young99.github.com)
Host 遠程倉庫的地址,注意哦,如果有些服務(wù)器做的 ip 端口轉(zhuǎn)發(fā),這里不要帶上端口號
Host 99Young99.github.com
HostName (托管網(wǎng)站的域名) 是遠程倉庫的地址,同樣如果做的端口轉(zhuǎn)發(fā)也不應帶端口號
HostName 主機名可用 ip 也可以是域名(如:github.com或者bitbucket.org)
網(wǎng)上大部分教程的配置文件中 Hostname 都是 github.com,配置成那樣可能不能正常 SSH 訪問,如果沒有成功,改為 ssh.github.com 試一下 (本人沒加 ssh 成功了,如下)
HostName github.com
Port 端口號,如果有做轉(zhuǎn)發(fā)需要在這里填寫端口號,沒有就不必要填
Port 服務(wù)器 open-ssh 端口 (默認:22,默認時一般不寫此行)
Port 8800
PreferredAuthentications publickey
用戶
User 登錄用戶名(如:git) // 即 github 上的用戶名
User 99Young99
識別 key 的文件
IdentityFile 證書文件路徑(如~/.ssh/id_rsa_*)
IdentityFile ~/.ssh/id_rsa
完整配置
Host 99Young99.github.com
HostName github.com
PreferredAuthentications publickey
User 99Young99
IdentityFile ~/.ssh/id_rsa
配置另一個 Github 賬號
都指向同一個平臺的話,下面的 Host 需要做個處理,因為我們在用這個 key 的時候根據(jù) Host 從上到下進行查找,不做修改肯定會先查找到第一個 key, 依舊無效,隨便改就好了,其他參數(shù)不做特殊處理
Host CS-Research-alliance.github.com
HostName github.com
PreferredAuthentications publickey
User CS-Research-alliance
IdentityFile ~/.ssh/github_id_rsa
網(wǎng)上大部分教程的配置文件中 Hostname 都是 github.com,配置成那樣是不能正常 SSH 訪問的。
(先注意一下: 這里一定是先把兩個公鑰添加到對應的 GitHub
賬戶,再進行下面的 ssh
連接測試,否則肯定是連接不上,會顯示 permission denied
。)
【第 1步】首先創(chuàng)建 GitHub 賬號并登陸,打開 Setting 進行設(shè)置,新建 SSH key

【第 2 步】點 New SSH key
后,填上任意 Title
,在 Key
文本框里粘貼id_rsa.pub
文件的所有內(nèi)容:

【第 3 步】輸入密碼進行確認,最后就可以看到,SSH key
添加完成


這時候,可以測試一下配置是否成功,測試命令使用別名。例如,對于 GitHub
,本來應該使用的測試命令是:
ssh -T git@github.com
但在 config
文件中,給 GitHub
網(wǎng)站配置的別名就是 CS-Research-alliance.github.com
以及 99Young99.github.com
,所以直接使用別名,就是
ssh -T git@CS-Research-alliance.github.com
ssh -T git@99Young99.github.com
出現(xiàn)如下信息說明配置成功了
Hi CS-Research-alliance! You've successfully authenticated, but GitHub does not provide shell access.
同樣的方式就可以配置更多的以 SSH
登錄的不同 git
用戶。
3. 配置倉庫設(shè)置
配置倉庫是因為這個時候有多個 SSH ,并對應了多個賬戶,所以每個賬戶應該在對應倉庫配置專屬的本地用戶名和郵箱,否則默認所有用戶均使用的全局用戶名和郵箱。
首先要刪除 Git
配置的全局用戶名和郵件地址,接著在每個項目倉庫中按照需求設(shè)置不同的 user.name
和 user.email
:
# 查看全局配置
git config --global user.name
git config --global user.email
# 查看本地配置(只能在 git 倉庫中使用)
git config --local user.name
git config --local user.email
# 刪除全局設(shè)置
git config --global --unset user.name
git config --global --unset user.email
# 添加本地設(shè)置
# 設(shè)置為私有倉庫的GitHub賬號郵箱和公有賬號的GitHub郵箱。
git config --local user.name "個人github賬號名"
git config --local user.email "個人github賬號郵箱"
對于 Github
為 99Young99
的本地倉庫配置如下:
git config --local user.name "99Young99"
git config --local user.email "xxx@qq.com"
對于 Github
為 CS-Research-alliance
的本地倉庫配置如下:
git config --local user.name "CS-Research-alliance"
git config --local user.email "xxx@163.com"
如果出現(xiàn)如下報錯,是因為必須要進入到 git 倉庫才可以正常執(zhí)行命令
fatal: --local can only be used inside a git repository
這一步以及后面的添加遠程倉庫,每創(chuàng)建一個新的本地倉庫的時候,都需要指定,因為全局配置已經(jīng)刪除了
之后在添加遠程倉庫的時候,把 github.com
修改成 99Young99.github.com
或者 CS-Research-alliance.github.com
就好了(即上述文件中的 Host
選項),用上面兩個 Host
名稱來代替原來的 github.com
,(這一步很重要)如:
git remote add origin git@99Young99.github.com:xxx/example.git # 99Young99
git remote add origin git@CS-Research-alliance.github.com:xxx/example.git # CS-Research-alliance.github
其實,上面的配置文件的意思就是,按照設(shè)置遠程倉庫時使用不同的 Host
名稱,查找 ~/.ssh/config
文件,使用不同的 SSH
文件連接到 GitHub
。這樣你就將是以不同的身份訪問 GitHub
倉庫。
4. 提交項目到不同的賬戶
比如提交到 CS-Research-alliance
賬戶上
初始化本地倉庫
git init
連接遠程倉庫,注意遠程倉庫的地址,其中 @
后默認為 github.com
,需要改為 ~/.ssh/config
配置 Host
時的別名,如本人的為:CS-Research-alliance.github.com
git remote add origin git@CS-Research-alliance.github.com:CS-Research-alliance/Summer-camp-and-exemption.git # 連接遠程倉庫
由于 Github
創(chuàng)建分支默認為 main
,所以需要將本地的 master
分支改為 main
分支(先看最后的命令解釋,再考慮是否執(zhí)行此句)
git branch -M main
如果遠程倉庫有內(nèi)容,包含 README
文件,需要先執(zhí)行下述命令
git pull --rebase origin master
提交項目
git add .
git commit -m "任意內(nèi)容"
-u
表示如果遠程沒有 master
分支,會創(chuàng)建一個 master
分支,并將項目提交上去,也就不需要將本地的 master
分支改為 main
了,否則執(zhí)行:git push -u origin main
git push -u origin master
References
[1] 一臺電腦雙GitHub賬戶配置
[2] 新手如何配置多個 SSH Key(通俗易懂手把手教學)
[3] 怎么給Git配置多個SSH Key?
[4] 一臺電腦綁定兩個(或多個)github賬號文章來源:http://www.zghlxwxcb.cn/news/detail-755135.html
[5] 在一臺電腦上配置多個github和gitlab賬號文章來源地址http://www.zghlxwxcb.cn/news/detail-755135.html
到了這里,關(guān)于一臺電腦雙 GitHub 賬戶配置,同時兩個 SSH 密鑰的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!