1、為什么要配置多個SSHKey
因為有的時候會出現這樣的Git使用場景,就比如我們在公司里面,會有一個公司的GitHub地址。然后我們自己平時練習寫一些代碼,會存到自己的Github上。而且現在很多公司用的是Gitlab,(實際上Github和Gitlab命令、操作等都是一模一樣的,然后配置的方法他們也是一樣的),Gitlab也會有一個地址。這樣簡短的一段描述,就會配置三個SSHKey賬戶。
所以在我們開發過程中,可能會遇到使用同一臺機器,既要向公司Git服務器提交代碼,也要向Github或者Gitlab等提交代碼。向不同的倉庫中提交代碼,所需要的用戶名信息也是不一樣的,此時就需要配置多個SSH Key
管理多個用戶。
2、配置多個sshkey
步驟1:生成SSHkey
生成一個公司用的SSH-Key密鑰
$ ssh-keygen -t rsa -C 'xxxxx@company.com' -f ~/.ssh/company_id_rsa
生成一個Github用的SSH-Key密鑰
$ ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/github_id_rsa
此時,~/.ssh
目錄下應該有4個文件:company_id_rsa
文件和company_id_rsa
文件,還有github_id_rsa
文件和github_id_rsa.pub
文件。
注意::密鑰文件的名稱不要和之前定義的密鑰文件名稱沖突,不過最好還是起一個比較有意義的名字。
步驟2:將的公鑰配置到GitHub官網上
詳細步驟請看前面文章。
步驟3:在~/.ssh
目錄下創建一個config文件
在.ssh
目錄創建一個config
文本文件,并完成相關配置。
每個賬號單獨配置一個Host,每個Host要取一個別名,每個Host主要配置HostName和IdentityFile兩個屬性即可。
常用編輯配置說明:
-
Host
:定義Host的名字,可以任取自己喜歡的名字,不過這個會影響Git相關命令。
例如:Host mygithub
這樣定義的話,即git@
后面緊跟的名字改為mygithub。
命令如下:git clone git@mygithub:PopFisher/AndroidRotateAnim.git
。
一般都會和HostName
屬性其一樣的名字。 -
HostName
:這個是真實的域名地址,要登錄主機的主機名。(建議與Host一致) -
IdentityFile
:指定私鑰文件的路徑,也就是id_rsa
文件的絕對路徑。 -
User
:配置登錄名,例如:GitHub的username。 -
Port
:端口號(如果不是默認22端口,則需要指定端口號) -
PreferredAuthentications
:配置登錄時用什么權限認證,可設為publickey,password publickey,keyboard-interactive等
。
示例:
# 1.個人git
Host github.com(github基本固定寫法)
HostName github.com(github基本固定寫法)
User ****
IdentityFile /Users/LLL/.ssh/github_id_rsa
PreferredAuthentications publickey
# 2.公司git
Host github.com(寫入公司的git地址)
HostName github.com(寫入公司的git地址)
User ****(公司的用戶名)
IdentityFile /Users/LLL/.ssh/company_id_rsa(公司密鑰)
PreferredAuthentications publickey
# 3.gitee and github
# 注意:多個Host公用一個公鑰時,
# 對應的HostName和Port必須跟在Host后面
Host gitee.com
HostName gitee.com
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
步驟4:測試SSHKey否配置成功
使用ssh -T
命令校驗,以GitHub為例:
ssh -T git@github.com
如果成功會顯示如下:
Hi cary! You've successfully authenticated, but GitHub does not provide shell access.
:您已經成功通過身份驗證。
提示:如果是云碼,則執行
$ ssh -T git@gitee.com
命令。
多個賬戶分別驗證通過即可。
說明多賬戶SSHKey配置成功。
如果測試沒有成功的話,教你解決問題的終極辦法。
比如測試GitHub遠程倉庫:
ssh -vT git@github.com
-v
參數是輸出編譯信息,然后根據編譯信息自己去解決問題吧。(一般來說,都是config
文件中的host那塊寫錯了)