問題引入
最近和一個老同學協作編寫代碼,所以就到Github上又注冊一個Github賬號(下面統一稱作TechGroup),所以我寫的代碼就想同時向我自己的Github帳戶(下面統一稱作MyGithub)和TechGroup提交,這是就會出現一個問題,因為一個ssh key只能用在一個帳戶中(當你將一個ssh key添加到兩個帳戶時,會提示ssh key已經被使用)。
在一臺電腦上同時配置兩個ssh key
- 首先為TechGroup帳戶創建一個ssh key:
$ ssh-keygen -t rsa -C cytmxk@foxmail.com
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/lala/.ssh/id_rsa):~/.ssh/tech_rsa(此處填寫rsa文件的路徑)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in yes.
Your public key has been saved in tech_rsa.pub.
The key fingerprint is:
fb:c4:b0:e0:47:fd:be:e0:fb:ea:73:ef:a8:29:d5:22 cytmxk@foxmail.com
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| . |
| . S .. |
| . oE=o.. |
| . +o+.. |
| ..+.+.. |
| oOB=+o |
+-----------------+
- 每一臺電腦默認只會使用ssh key(~/.ssh/id_rsa)私鑰與遠程服務端的公鑰進行配對,所以現在就是要讓電腦知道現在有兩個ssh key私鑰可以用來配對。
1> 通過ssh-agent來保存兩個ssh key私鑰
首先通過如下命令列舉 ssh-agent中包含的ssh-key私鑰:
$ ssh-add -l
The agent has no identities.
可以看到現在ssh-agent中是空的。
如果是在Windows操作環境中,上面的命令會報錯:
Could not open a connection to your authentication agent.
解決方法就是執行如下命令進入ssh-add操作環境即可:
$ ssh-agent bash
執行如下命令將兩個私鑰添加到ssh-agent中:
$ ssh-add ~/.ssh/id_rsa
$ ssh-add ~/.ssh/tech_rsa
$ ssh-add -l
2048 SHA256:U/pK956tFobOPNSFgnny9IKcxXWdFSVMl4wsVQ/izTA /Users/chenyang/.ssh/id_rsa (RSA)
2048 SHA256:uDP8CISrd8Os1vl+wnuPj4ldJaiq2XQnRk9FGKHhDfU /Users/chenyang/.ssh/tech_rsa (RSA)
192:~ chenyang$
可以看到ssh-add -l命令輸出中多了一行,這一行就是tech_rsa私鑰。
看起來好像一切都很好,但是當你重啟電腦后,ssh-agent會被重置為空,
ssh-add 這個命令不是用來永久性的記住你所使用的私鑰的。實際上,它的作用只是把你指定的私鑰添加到 ssh-agent 所管理的一個 session 當中。而 ssh-agent 是一個用于存儲私鑰的臨時性的 session 服務,也就是說當你重啟之后,ssh-agent 服務也就重置了。
因此通過ssh-agent是行不通的,下面來看另一種方法。
2>通過.ssh/config保存兩個ssh key私鑰
#多個ssh的配置 begin
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa
Host tech.github.com
HostName github.com
IdentityFile ~/.ssh/tech_rsa
#多個ssh的配置 end
可以看到每一個私鑰都會對應一個Host。
3> 將創建生成tech_rsa.pub中的內容添加到TechGroup帳戶中,添加的流程這里就不贅敘了,接下來測試一下是否添加成功(如果輸出如下結果,表明添加成功):
$ ssh -T git@tech.github.com
Hi techgroup01! You've successfully authenticated, but GitHub does not provide shell access.
注意上面的git@tech.github.com中的tech.github.com與config中的tech _rsa的Host保持一致。
接下來就是從遠程github資源庫下載資源了,
git clone git@github.com:cytmxk/customview.git
此時會使用~/.ssh/id_rsa密鑰進行配對
git clone git@tech.github.com:techgroup01/customview.git
此時會使用~/.ssh/tech_rsa密鑰進行配對
給一個本地git資源庫配置兩個遠程github資源庫
上面只是實現了通過不同的密鑰從遠程github資源庫下載到本地的方法,但是此時會有另一個問題,同一個本地git資源庫怎么提交到不同的遠程github資源庫?那就需要給一個本地git資源庫配置兩個遠程資源庫,
執行如下命令即可:
$ git remote add my_origin git@github.com:cytmxk/customview.git
$ git remote add tech_origin git@tech.github.com:techgroup01/customview.git
上面命令中要注意第二句中的遠程資源庫的Host要和config中相同,可以通過如下命令列舉出當前庫的所用遠程資源庫:
$ git remote -v
my_origin git@github.com:cytmxk/customview.git (fetch)
my_origin git@github.com:cytmxk/customview.git (push)
tech_origin git@tech.github.com:techgroup01/customview.git (fetch)
tech_origin git@tech.github.com:techgroup01/customview.git (push)
接下來通過如下命令將本地git資源庫提交到不同的遠程github資源:
git push my_origin master
git push tech_origin master