1.進入linux服務器,通過ssh-keygen?-m PEM -t rsa -b?4096命令生成id_rsa.pub和id_rsa密鑰對,其中4096為生成4096字符的密鑰,可以換做2048生成2048字符的密鑰。
也可以ssh-keygen?-m PEM -t rsa -b?4096 -f ~/.ssh/gitlab-rsa,使用-f參數指定生成的位置
2.然后將id_rsa.pub公鑰中的內容復制到gitlab中,點擊“Add Key”生成
3.完成gitlab配置ssh Key,就可以直接使用gitlab的ssh連接拉取或推送代碼了。
4.同一臺服務器上可以存在多個密鑰,但密鑰的名稱不能一樣,例如id_rsa_gitlab、id_rsa_github。
在~/.ssh/目錄中直接vim config,用于配置多個不同的host使用不同的ssh key
host為識別模式,進行配置對應的主機名和ssh文件
hostname為登錄的主機名
identityFile為對應的id_rsa文件路徑
user為登錄名
5.至此,在服務器上拉取不同host項目代碼都能成功了。
項目實踐:
背景:jenkins服務器為多節點,A為master,gitlab上配置的是A的ssh Key。jenkins執行job的時候,job被分配到了B slave節點,pipeline中使用了git(url:gitUrl,branch:"qa",credentialsId:credentialsId)方式來指定使用jenkins中配置的憑據來拉取代碼(該憑據為master節點和gitlab的ssh Key連接,配置免密登錄),其中credentialsID為該憑據的ID,ID與密鑰所匹配,所以使用jenkins生成的id就相當于使用了該密鑰。
代碼被拉取到了slave服務器,進入salve服務器中該項目的目錄中,再使用git pull、git push會發現,沒有權限拉取、推送。這是因為slave服務器中的密鑰沒有被配置到gitlab上,所以無法拉取。
此時,通過config配置,新建id_rsa_gitlab(將master服務器的id_rsa密鑰cp到id_rsa_gitlab中),再git pull或push就可以成功了,因為config中的host為gitlab.xxx.com,在執行git命令的時候就會匹配到該host,就會用id_rsa_gitlab中的密鑰。
解決。