在使用git的時候匾荆,一般我們使用的遠(yuǎn)程Git服務(wù)器是github,這時只需簡單的生成ssh-key密鑰對并將公鑰添加到github中就可以使用ssh了。
但在公司開發(fā)使用內(nèi)部的git時,一般在gitlab,使用的郵箱一般是公司的郵箱,那么就需要配置多個ssh-key賬戶了徊都。
假設(shè)user使用github的郵箱為user1@163.com;user2使用gitlab的郵箱為user2@163.com,下面是配置過程:
- 首先進(jìn)入用戶主目錄下的.ssh文件夾,我們生成的密鑰對放在這兒
$ cd ~/.ssh
- 分別為user1和user2生成密鑰對:
默認(rèn)三次回車生成key的名字為id_rsa广辰,注意在生成第二個的時候不要使用默認(rèn)名暇矫,否則會覆蓋第一個,在以下位置為第二個輸入名字
#新建SSH key
$ ssh-keygen -t rsa -C "user1@163.com"
$ ssh-keygen -t rsa -C "user2@163.com"
#設(shè)置user2的命名為id_rsa_work
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa_work
此時在.ssh目錄下就有兩個密鑰對文件id_rsa和id_rsa_work,我們將公鑰分別拷至對應(yīng)的Git服務(wù)器
- 添加key到SSH agent中:
此時還無法使用第二個服務(wù)器择吊,因為Git會默認(rèn)只讀取到id_rsa,為了讓SSH識別新的私鑰李根,需將其添加到SSH agent中:
$ ssh-add ~/.ssh/id_rsa
$ ssh-add ~/.ssh/id_rsa_work
如果出現(xiàn)Could not open a connection to your authentication agent的錯誤,就試著用以下命令:
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
$ ssh-add ~/.ssh/id_rsa_work
成功會顯示:
Identity added: /c/Users/Windows用戶名/.ssh/key名 (/c/Users/Windows用戶名/.ssh/key名)
注意:ssh-add 這個命令不是用來永久性的記住你所使用的私鑰的几睛。實際上房轿,它的作用只是把你指定的私鑰添加到 ssh-agent 所管理的一個 session 當(dāng)中。而 ssh-agent 是一個用于存儲私鑰的臨時性的 session 服務(wù)所森,也就是說當(dāng)你重啟之后囱持,ssh-agent 服務(wù)也就重置了。
- 創(chuàng)建并配置config文件使配置永久生效:
在.ssh目錄下新建一個文本文件焕济,命令為config纷妆,不需要后綴,bash下可直接使用touch config,編輯以下內(nèi)容:
# gitlab
Host gitlab的IP
HostName gitlab的Host //這里填你們公司的git網(wǎng)址即可
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_work
User user2
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
User user1
其規(guī)則就是:從上至下讀取config的內(nèi)容吼蚁,在每個Host下尋找對應(yīng)的私鑰凭需。按照你的情況修改就可以。
- 使用:如果之前有設(shè)置全局用戶名和郵箱的話肝匆,需要unset一下,可通過
$ git config --list
來查看全局配置
$ git config --global --unset user.name
$ git config --global --unset user.email
可以在不同的倉庫下設(shè)置局部的用戶名和郵箱用不同的賬號登錄顺献,比如在公司的repository下:
$ git config user.name "user2"
$ git config user.email "user2@163.com"
- 測試:
$ ssh -T git@github.com
#輸出:Hi user1! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@gitlab的IP
#輸出:Hi user2@163.com**, this is git@.....
測試成功旗国。
如果出什么問題,可以通過ssh -vT git@github.com
來輸出編譯信息注整,然后根據(jù)編譯信息去解決問題