Git拾遺:一機多SSH-Key管理

一句話歸納本文git

在須要用到多個ssh-key的場景,經過配置config文件解決此問題。github


引言ubuntu

關於Git的使用總結之前已經寫過一篇文章了:小豬的Git使用總結, 應付平常開發基本夠用了,但在實際開發中,會遇到各類各樣的問題。 好比我司最近把項目都從本身的Gitlab服務器上遷移到碼雲上,就遇到 了一個問題:多個SSH-key管理的問題。通常來說呢,一個ssh-key是 能夠用在多個Git服務器的,這東西只是用於加密訪問,只要服務器上的 公鑰可以和本地的私鑰配對就能夠了。可是呢,不一樣的帳號不能用同樣的 公鑰vim

若是你用過Git提交代碼,相信你對SSH Key不會陌生,在Clone項目的 時候能夠看到有兩種可選協議 HTTPS和SSHbash

連接是這樣的:服務器

https://gitee.com/xxx/YYY.git
git@gitee.com:xxx/YYY.git
複製代碼

走Https協議,能夠clone任何項目,可是Push時須要輸入帳號密碼 走ssh協議,必須是項目的擁有者和管理員才能clone,配置了ssh-key的話,推送的 時候,不用輸入帳號密碼(前提是你在配置ssh-key的時候沒有設置密碼),直接就能提交。ssh

能夠經過下面簡單的命令建立一個ssh-keyui

cd ~/.ssh

# 若是路徑不存在的話,鍵入下述命令建立ssh文件夾
mkdir ~/.ssh

# 鍵入下述命令生成ssh-key的公鑰和私鑰
# 會讓你依次輸入文件名,密碼,密碼,結束後默認生成id_rsa和id_rsa.pub
ssh-keygen -t rsa -C "xxx@xxx.cn"

# 你還能夠寫得簡短點直接把名字寫在命令後
ssh-keygen -t rsa -C "xxx@xxx.cn" -f ~/.ssh/id_rsa_xx

# 上面這個命令就會生成id_rsa_xx和id_rsa_xx.pub的私鑰和公鑰了。
複製代碼

ssh-key建立完後,須要打開公鑰,複製裏面的內容,而後貼到你Gitlab,Github, 碼雲的SSH-Key配置頁,好比個人:加密

配置成功後,命令行鍵入:spa

ssh -T git@gitee.com
複製代碼

若是出現這樣的提示,說明配置完成~


問題來了

通常來說,除了公司倉庫外,開發者通常也會有本身的Git倉庫,好比我有本身的 Github碼雲coding.net,若是是同樣的郵箱,那還好, 能夠git remote add 命令添加分支別名,好比:

git remote add origin xxx@xxx.git
git remote add osc yyy@yyy.git
複製代碼

而後push或者pull的時候手動指定遠程倉庫對應的分支便可

git push origin master
git pull osc master
複製代碼

可是問題來了,公司郵箱和本身郵箱不同,若是你直接執行 上面那個**ssh-keygen -t rsa -C "xxx@xxx.cn"**建立是會覆蓋掉原先的ssh-key, 而後出現公司項目能Push,本身項目不能Push的問題。

解決方法以下

  • Step 1:假設我有一個本身的帳號和公司帳號,經過下述命令能夠建立兩個不一樣的ssh-key
ssh-keygen -t rsa -C "xxx@xxx.xxx" -f ~/.ssh/id_rsa_my
ssh-keygen -t rsa -C "yyy@yyy.yyy" -f ~/.ssh/id_rsa_work
複製代碼
  • Step 2設置ssh key代理
ssh-add -l

# 若是提示:Could not open a connection to your authentication agent.
# 鍵入下述命令:
exec ssh-agent bash
複製代碼
  • Step 3:添加私鑰
ssh-add ~/.ssh/id_rsa_my
ssh-add ~/.ssh/id_rsa_work

# 鍵入上面的ssh-add -l能夠查看全部ssh-key代理
# 鍵入ssh-add -D 能夠刪除全部代理
複製代碼
  • Step 4:把公鑰(.pub)內容複製到你遠程倉庫的裏

  • Step 5:添加編輯配置文件config

# bash裏能夠用touch新建,ubuntu裏能夠用gedit~
vim ~/.ssh/config

# 文件內容
# work
Host gitee
    HostName gitee.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_work
    user git
# my
Host github
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_my
    user git
    
# 配置文件參數
# Host:對識別的模式,進行配置對應的的主機名和ssh文件
# HostName:登陸主機的主機名
# PreferredAuthentications:設置登陸方式,publickey公鑰,改爲password則要輸密碼
# IdentityFile:私鑰全路徑名
# User:登陸名
    
複製代碼
  • Step 6:配置完成後依次鍵入下述命令進行驗證,看下是否生效
ssh -T git@gitee.com
ssh -T git@github.com
複製代碼

到此就配置完畢啦~


還有一點

對了,有些小夥伴會把這個ssh-key和提交代碼的人混淆,由於在配置ssh-key的命令 後面跟了一串郵箱,覺得這就是提交author的郵箱,其實否則,這個東西是經過 git config命令進行設置的!git服務器會根據配置文件的user.email和user.email 來設置提交者的信息!

git config user.name "CoderPig" //用戶名
git config user.email  "coderpig@xxx.com"   //郵箱
複製代碼
相關文章
相關標籤/搜索