前言
Gitee 提供了基于 SSH 协议的 Git 服务,jenkins可使用ssh方式连接gitee,拉取代码、提交tag等;使用ssh 连接,相比用户名+密码方式,可省去因密码变更而引起的jenkins关联修改。
gitee生成、添加 SSH 公钥
生成SSH公钥
Gitee 提供了基于 SSH 协议的 Git 服务,在使用 SSH 协议访问仓库之前,需要先配置好仓库的 SSH 公钥。
按照生成、添加 SSH 公钥生成公钥和私钥,
ssh-keygen -t ed25519 -C "Gitee SSH Key"
- -t key 类型,密钥算法除了ed25519 ,还有RSA、ECDSA、ED25519-SK/ECDSA-SK, 推荐优先级:
- ED25519 - 现代首选(性能好,安全性高)
- RSA 4096位 - 广泛兼容(传统选择)
- ECDSA - 中等选择(兼容性较好)
- ED25519-SK/ECDSA-SK - 安全性要求极高的场景
- DSA - 避免使用(已不安全)
- -C 注释
输出,如
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/git/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/git/.ssh/id_ed25519
Your public key has been saved in /home/git/.ssh/id_ed25519.pub
# 远程服务器返回的指纹信息
The key fingerprint is:
SHA256:ohDd0OK5WG2dx4gST/j35HjvlJlGHvihyY+Msl6IC8I Gitee SSH Key
The key's randomart image is:
+--[ED25519 256]--+
| .o |
| .+oo |
| ...O.o + |
| .= * = +. |
| .o +..S*. + |
|. ...o o..+* * |
|.E. o . ..+.O |
| . . ... o =. |
| ..oo. o.o |
+----[SHA256]-----+
生成id_ed25519 、id_ed25519.pub文件
- 私钥文件 id_ed25519
- 公钥文件 id_ed25519.pub
添加 SSH 公钥
复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,将生成的公钥添加到仓库中。
验证
$ ssh -T git@gitee.com
Hi Anonymous! You've successfully authenticated, but GITEE.COM does not provide shell access.
jenkins 配置私钥
在 Jenkins 的 Dashboard 上,点击“管理 Jenkins” -> “管理凭证”。
点击“系统”区域中的“全局凭证”。
点击“添加凭证”。
选择“私钥”类型。
输入一个 ID 和描述。
在“私钥”区域,粘贴你的私钥内容(从id_ed25519文件中复制)。
点击“确定”保存凭证。
指纹
gitee中添加完公钥,会生成一个指纹信息;指纹是用来验证远程主机是可信的,防止中间人攻击,Gitee SSH 密钥指纹
在第一次连接远程服务器时,Git/SSH 客户端会收到一个由 Gitee.com
服务器返回的指纹。你需要将此指纹与从可信渠道获取到的指纹进行比对,确认 Gitee.com 服务器的公钥是否正确。
Gitee中查看指纹
查看本地指纹信息
ssh-keygen -lf ~/.ssh/known_hosts | grep gitee.com
256 SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc gitee.com (ECDSA)
- -l:显示公钥的指纹信息
- -f:指定要处理的公钥文件路径
- -E sha256:使用SHA256算法计算指纹
总结
将公钥配置在gitee,将私钥配置在jenkins,jenkins连接gitee时,会用私钥生成签名,gitee收到请求,使用公钥验签;这也符合RSA的签名算法流程;