当前位置: 首页 > news >正文

Gitlab 中几种不同的认证机制(Access Tokens,SSH Keys,Deploy Tokens,Deploy Keys)

前言

公司主要使用 Go 语言做项目,有一些 Gitlab 私有仓库需要引用,在做 CI 时,要自行配置权限以获取代码。

最近发现各个项目组在做 CI 遇到仓库权限问题时的解决方式不尽相同,有用 Project Token 的,有用 Deploy Keys 的。

了解一下。

使用

原理就两种,一是 SSH 方式拉取代码,二是 http 方式。

SSH 方式

本机生成 SSH Key,将公钥从 Gitlab 页面添加进去,注意选择下过期时间即可。

如何生成 Key?打开终端输入:

# ED25519
ssh-keygen -t ed25519 -C "<comment>"
# 2048-bit RSA
ssh-keygen -t rsa -b 2048 -C "<comment>"

任选其一即可,照着提示,一步步输入回车,就可以看到在你指定的文件夹下生成了两个文件,一个公钥一个私钥文件,例:

ed25519 # 私钥
ed25519.pub # 公钥

克隆仓库,使用 SSH 链接即可

git clone ssh://git@gitlab.com/<namespace>/<project_name>.git

http 方式

打开 Gitlab 网页,新增 Token,注意选择 Token 权限范围,只是拉取代码,read_repository 即可。生成后的 Token 值要自己保存好,因为只能看到一次。

clone 仓库

git clone https://<name>:<token>@gitlab.com/<namespace>/<project_name>.git

每次都要输入 name, token 比较麻烦,可以全局配置 git

git config --global url."https://<name>:<token>@gitlab.com".insteadOf "https://gitlab.com"

不同权限介绍

Gitlab 上有几个入口

  1. Personal Access Tokens
  2. Personal SSH Keys
  3. Group Access Tokens
  4. Group Deploy Tokens
  5. Repository Access Tokens
  6. Repository Deploy Tokens
  7. Repository Deploy Keys

1. Personal Access Tokens

用户个人的 Token,创建时可以选择多种权限,一般建议 token 的权限给小点,够用就行,例如:需要拉取代码,只给 read_repository 权限即可。

入口: User Settings -> Access Tokens

请添加图片描述

2. Personal SSH Keys

SSH 密钥主要用于身份验证,以允许用户通过 SSH 协议访问 Git 仓库。不同于个人访问 TokenSSH 密钥并没有直接的权限范围概念,而是通过用户的 GitLab 账户权限和项目的访问级别来控制访问。

SSH 密钥本身的作用是加密通信的一部分,用来证明你是谁,而具体的仓库访问权限则由 GitLab 的用户和项目设置来决定。

入口: User Settings -> SSH Keys

请添加图片描述

3. Group Access Tokens

同个人的 Token 的使用方式一致,只是其作用域只在当前组内生效。

入口: Group Settings -> Access Tokens

请添加图片描述

4. Group Deploy Tokens

看名字就知道是专门为部署使用的,个人理解跟 Group Access Tokens 差不太多,只是其权限范围少了很多,只有 read_repository, read_registry, write_registry 权限,不能访问 Gitlab API 来执行特定操作。

入口: Group Settings -> Repository -> Deploy Tokens

请添加图片描述

5. Repository Access Tokens

Token 使用方式一致,只是权限范围更小了,其作用域只在当项目内生效。

入口: Project Settings -> Access Tokens

请添加图片描述

6. Repository Deploy Tokens

Group Deploy Tokens 相似,只是权限范围更小了,其作用域只在当项目内生效。

入口: Project Settings -> Repository -> Deploy Tokens

请添加图片描述

7. Repository Deploy Keys

SSH 使用方式一致。部署机器上生成 SSH 密钥对,新增 Deploy Key,将公钥放入即可。

入口: Project Settings -> Repository -> Deploy Keys

请添加图片描述

个人理解:Deploy Key 就相当于一台机器,项目若是允许机器获取代码,在本项目中把它添加进来即可。

Deploy Keys 一个比较特殊的点:在该项目中生成的 Deploy Key,可以被其他项目添加,即使不在组内也可以。

请添加图片描述

CI Docker 镜像中 Go 拉取私有仓库的代码

主要是配置拉取代码的权限,两种方式:

  1. 使用 token
RUN git config --global url."https://$name:$token@gitlab.com".insteadOf "https://gitlab.com"RUN go env -w GOPRIVATE=gitlab.com && go mod tidy
  1. 使用 ssh key
# ssh key 安全考虑,一般放在环境变量中传入
RUN mkdir ~/.ssh && echo $id_rsa > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa
# 处理错误:Host key verification failed.
RUN echo "Host *\n\tStrictHostKeyChecking no\n\tCheckHostIP no\n" > ~/.ssh/configRUN git config --global url."ssh://git@gitlab.com".insteadOf "https://gitlab.com"RUN go env -w GOPRIVATE=gitlab.com && go mod tidy

其他

GPG(GNU Privacy Guard) Keys 密钥主要用于签名和验证 Git 提交,而不是直接用于拉取代码。GPG 密钥的主要作用是确保提交的完整性和来源的真实性,而不是作为访问控制机制。

总结

本篇介绍了 Gitlab 的几种认证方式,其入口虽然不同,但原理基本一致,就两种方式:SSHToken

使用 Token 时需注意权限最小化(尽量为 Token 分配最小必要的权限,避免不必要的安全风险)。

不管使用哪种方式,定期审查很重要,需要定期审查 令牌/Key 的使用情况,确保它们仍然符合需求,并及时撤销不再需要的令牌。

最后简单介绍了一下在做 CIDocker 镜像中如何用 Go 拉取私有仓库的代码,环境配好即可。需要注意 TokenSSH Key 不要以明文方式输入,通常使用环境变量。

参考

  • gitlab官方文档

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 209.长度最小的子数组(滑动窗口类)
  • Proteus 仿真设计:开启电子工程创新之门
  • 基于深度学习的信号滤波:创新技术与应用挑战
  • 计算机专业毕业设计选题指南:避开这些坑,让你轻松毕业-附选题推荐(精选题目汇总大全)
  • AutoSar AP通信的事件订阅
  • 原生 JavaScript 封装 JSONP 跨域请求
  • 【系统架构设计师-2021年真题】案例分析-答案及详解
  • [羊城杯 2020]Blackcat1
  • Cross-Encoder实现文本匹配(重排序模型)
  • 数据库DDL语句
  • linux驱动开发-ioctl
  • 基于 onsemi NCV78343 NCV78964的汽车矩阵式大灯方案
  • scroll-behavior属性与页面平滑滚动
  • 论文翻译:arxiv-2022 Ignore Previous Prompt: Attack Techniques For Language Models
  • Redis——通用命令
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Android组件 - 收藏集 - 掘金
  • hadoop集群管理系统搭建规划说明
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java的Interrupt与线程中断
  • Lucene解析 - 基本概念
  • PHP CLI应用的调试原理
  • SAP云平台里Global Account和Sub Account的关系
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue脚手架vue-cli
  • Yeoman_Bower_Grunt
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 给github项目添加CI badge
  • 基于HAProxy的高性能缓存服务器nuster
  • 简单易用的leetcode开发测试工具(npm)
  • 微信小程序设置上一页数据
  • 微信支付JSAPI,实测!终极方案
  • 为视图添加丝滑的水波纹
  • 写代码的正确姿势
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​用户画像从0到100的构建思路
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • # 透过事物看本质的能力怎么培养?
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • ${factoryList }后面有空格不影响
  • ( 10 )MySQL中的外键
  • (39)STM32——FLASH闪存
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (python)数据结构---字典
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (十八)三元表达式和列表解析
  • (算法)求1到1亿间的质数或素数
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)C#调用WebService 基础