當前很多公司都選擇git作為代碼版本控制工具,然后自己公司搭建私有的gitlab來管理代碼,我們在clone代碼的時候可以選擇http協議,當然我們亦可以選擇ssh協議來拉取代碼。但是網上很少找到如何用git客戶端生成ssh key,然后配置在gitlab,我當時在做的時候苦於摸索,后來終於找到了解決方案,那么本文,我們就來聊一聊如何本地git客戶端生成ssh key,然后配置在gitlab里,而后使用ssh協議進行提交和拉取git遠程倉庫的代碼。
二、解決方案
-
打開本地git bash,使用如下命令生成ssh公鑰和私鑰對
ssh-keygen -t rsa -C 'xxx@xxx.com'
然后一路回車(-C 參數是你的郵箱地址) -
然后打開~/.ssh/id_rsa.pub文件(~表示用戶目錄,比如我的windows就是C:\Users\Administrator),復制其中的內容
-
打開gitlab,找到Profile Settings-->SSH Keys--->Add SSH Key,並把上一步中復制的內容粘貼到Key所對應的文本框,在Title對應的文本框中給這個sshkey設置一個名字,點擊Add key按鈕
4. 到此就完成了gitlab配置ssh key的所有步驟,我們就可以愉快的使用ssh協議進行代碼的拉取以及提交等操作了
5. 再試一下拉取代碼和提交代碼,應該就不需要輸入密碼了
三、本地配置多個ssh key
大多數時候,我們的機器上會有很多的git host,比如公司gitlab、github、oschina等,那我們就需要在本地配置多個ssh key,使得不同的host能使用不同的ssh key ,做法如下(以公司gitlab和github為例):
-
為公司生成一對秘鑰ssh key
ssh-keygen -t rsa -C 'yourEmail@xx.com' -f ~/.ssh/gitlab-rsa
-
為github生成一對秘鑰ssh key
ssh-keygen -t rsa -C 'yourEmail2@xx.com' -f ~/.ssh/github-rsa
-
在~/.ssh目錄下新建名稱為config的文件(無后綴名)。用於配置多個不同的host使用不同的ssh key,內容如下:
# gitlab Host gitlab.com HostName gitlab.com PreferredAuthentications publickey IdentityFile ~/.ssh/gitlab_id-rsa # github Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/github_id-rsa # 配置文件參數 # Host : Host可以看作是一個你要識別的模式,對識別的模式,進行配置對應的的主機名和ssh文件 # HostName : 要登錄主機的主機名 # User : 登錄名 # IdentityFile : 指明上面User對應的identityFile路徑
- 按照上面的步驟分別往gitlab和github上添加生成的公鑰gitlab_id-rsa.pub和github_id-rsa.pub
-
OK,大功告成,再次執行git命令驗證是不是已經不需要再次驗證權限了。
-
再次查看~/..ssh目錄下的文件,會有gitlab_id-rsa、gitlab_id-rsa.pub和github_id-rsa、github_id-rsa.pub四個文件
三、總結
我們為什么要使用ssh協議呢?因為ssh更加安全,然后更加方便,比如我們公司的gitlab由http協議換成了https協議,那么如果你是使用http協議管理代碼,那么需要修改所有的項目中的git地址變成https,這會把我們給逼瘋的!但是如果我們一開始就是用ssh協議,這不需要任何的修改,簡直不能再爽一點了。