ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Jenkins使用之五】jenkins集成Gitlab

2020-09-10 12:31:31  阅读:236  来源: 互联网

标签:公钥 登录 Gitlab rsa ssh key 之五 jenkins com


【Jenkins使用之五】jenkins集成Gitlab
环境
  CentOS Linux release 7.6.1810
  jdk1.8.0_65
  apache-tomcat-8.5.45
  Jenkins-2.235.5
  apache-maven-3.6.3
  git-2.9.5
  gradle-6.6.1
  SonarQube-7.8
  sonar-scanner-cli-4.2.0.1873

一、SSH key
SSH(Secure Shell Protocol):是一种协议,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输,确保了传递的数据安全。
SSH key即SSH密钥对,可以让您方便的登录到SSH服务器,而无需输入密码,也就是免密登录。SSH 密钥对总是成双出现的,一把公钥,一把私钥。公钥可以自由的放在您所需要连接的SSH服务器上,而私钥保存在客户端。

1、公钥和私钥作用
(1)什么是公钥登录
公钥登录,很多时候也说public key认证,公钥登录的原理:首先用户将自己的公钥存储在需要登录的远程机器上面,然后登录的时候,远程主机会向用户发送一段随机字符串,接着用户使用自己的私钥加密字符串,并发给远程主机。最后,远程主机使用存储的公钥进行解密,若解密成功,则说明用户可信,准许登录,不在提示输入密码。

备注:
1)服务端会将客户端发的公钥写入到~/.ssh/authorized_keys 文件末尾。
2)公钥和私钥在客户端(登录端)生成

(2)什么是口令登录
口令登录,即登录的时候需要输入登录密码。

1)客户端向服务器发出请求
2)服务器将自己的公钥返回给客户端;
3)客户端用服务器的公钥加密登录信息, 再将信息发送给服务器;
4)服务器接收到客户端传送的登录信息, 用自己的私钥解码, 如果结果正确, 则同意登录, 建立起连接。

备注:公钥和私钥在服务端生成

2、密钥对的生成

sh-keygen命令,可以生成公钥和私钥,默认生成到用户的家目录下的.ssh文件夹里面
示例:ssh-keygen -t rsa -C "cac2020@163.com"
私钥默认会被保存在 ~/.ssh/id_rsa
公钥默认会被保存在 ~/.ssh/id_rsa.pub
参数解析:
  -f 指定要生成文件的文件名称
  -t 设置认定方式,值为rsa,即非对称加密;或dsa,即数字签名和认证
  -c 指定公钥中的备注信息。在gitlab里备注一般使用邮箱,因为像gitlab、github等都是通过邮箱来区分的,邮箱仅仅是识别用的key

二、为什么GitLab需要SSH Key
因为GitLab需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitLab只要知道了你的公钥,就可以确认只有你自己才能推送。另外,CI/CD(服务器环境,不能阻塞态等待输入)
https开头的就是用的https了,git@ 开头的就是用的ssh了.

场景一:不同账号生成不同SSH Key

(1)打开Git Bash,输入ssh-keygen -t rsa -C "cac2020@163.com" ,三个回车,没有输入密码,最后在用户家目录下找到.ssh目录

(2)拷贝公钥里面的内容,粘贴到GitLab-->Settings下面SSH Keys里

(3)配置完成上面操作后,会发现Gitlab里项目地址已经变成了:git@192.168.76.65:sonartest/maven-basic.git SSH的了.
然后到本地项目目录下Git Bash执行 git config --global credential.helper store,再次pull或者push的时候还要输入用户名和密码,输入之后 下次就不用再输入了。注意:如果账或者邮箱错误 可以重新按照以上步骤重新生成。

参考:另外一种免密登录的配置方式

场景二:同一账号多个终端生成不同SSH Key
GitLab允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitLab,就可以在每台电脑上往GitLab推送了。那最好这里-C指定的title最好是主机名来区分。

场景三:一个终端配置多个ssh key
大多数时候,我们的机器上会有很多的git host,比如公司gitlab、github、oschina等,那我们就需要在本地配置多个ssh key,使得不同的host能使用不同的ssh key。以前用github的ssh key,后来工作原因多了一个gitlab的账号,在绑定gitlab的ssh key时,发现将github的ssh key覆盖了。怎么同时绑定github和gitlab的ssh key,并不产生冲突呢?技巧是在.ssh目录下新建一个config文件配置一下,就能解决gitlab与github的ssh key的冲突。
做法如下:问题的关键是生成密钥对的时候需要指定文件
(1)生成公司的GitLab秘钥ssh key

ssh-keygen -t rsa -C 'yourEmail@xx.com' -f ~/.ssh/gitlab-rsa

(2)生成github秘钥ssh key

ssh-keygen -t rsa -C 'yourEmail2@xx.com' -f ~/.ssh/github-rsa

(3)登录ssh-agent 添加添加私钥

eval `ssh-agent`
ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitlib
ssh-add ~/.ssh/id_rsa_oschina
ssh-add ~/.ssh/id_rsa_foxmail

(4)在~/.ssh目录下新建名称为config的文件(无后缀名)。用于配置多个不同的host使用不同的ssh key,内容如下:

Host github.com
    HostName github.com
    User smallajax@foxmail.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_github
Host gitlib.com
    HostName gitlib.com
    User smallajax@foxmail.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_gitlib
Host oschina.com
    HostName oschina.com
    User smallajax@foxmail.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_oschina
Host 192.168.1.222
    HostName 192.168.1.222
    User smallajax@foxmail.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_foxmail
# 配置文件参数
# Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
# HostName : 要登录主机的主机名
# User : 登录名,填邮箱或者用户名都可以
# IdentityFile : 指明上面User对应的identityFile路径

(5)按照上面的步骤分别往gitlab和github上添加生成的公钥gitlab_id-rsa.pub和github_id-rsa.pub

 

参考:git多账号设置免密登录
git多账号免密登录2

三、jenkins集成Gitlab

 

参考:jenkins集成Gitlab

标签:公钥,登录,Gitlab,rsa,ssh,key,之五,jenkins,com
来源: https://www.cnblogs.com/cac2020/p/13644966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有