服务器与gitlab通过ssh方式连接

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中的密钥。

解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容