GitLab的使用
文章目录
- 一、什么是GitLab、有什么用、与Jenkins的区别
- 什么是GitLab及其用途
- GitLab与Jenkins的区别
- GitLab的CI/CD功能介绍
- 二、GitLab的安装与配置
- Linux下GitLab的安装
- *Linux下GitLab的简单使用
- /etc/gitlab/gitlab.rb 的配置
- GitLab服务器的域名
- 邮箱配置
- 功能优化
- 关闭一些暂时不需要的GitLab的功能组件来提升GitLab的启动和运行速度
- 重新加载gitlab配置
- 操作gitlab运行状态
- 操作gitlab中的单个的服务
- 查看gitlab的服务的日志
- gitlab其他相关的配置文件位置
- GitLab发邮件测试
- `gitlab-rails`和 `gitlab-rails console`
- gitlab-rails 命令的作用
- "gitlab-rails console" 的作用
- gitlab-rails 命令的具体使用方法
- Rails 应用程序的主要特点包括:
- Rails 应用程序的应用场景:
- 使用GitLab汉化包
- gitlab重启后报502错误无法登录的解决
- 三、GitLab的Web页面的访问与配置
- 如何使用gitlab-rails console修改GitLab的root访问密码
- 登录后创建项目
- 其他机器提交的文件将会保存到gitlab机器的哪个位置中
- 如何配置ssh密钥避免每次访问都要输入仓库用户及其密码
- 配置ssh免密后的访问仓库的验证
- SSH密钥和GPG密钥的配置区别
- SSH密钥
- GPG密钥
- 区别总结
- 1. 生成GPG密钥对
- 2. 导出公钥
- 3. 添加公钥到Git服务提供商
- 4. 配置Git使用GPG
- 5. 签名提交
- 6. 签名标签
- 7. 验证签名
- 8. 推送签名的提交和标签
- 9. 验证推送的签名
- 四、GitLab的备份与转移??
- 五、
一、什么是GitLab、有什么用、与Jenkins的区别
什么是GitLab及其用途
GitLab是一个基于Git的开源代码仓库管理工具,提供了代码托管、持续集成、持续部署、问题跟踪、代码审查等功能,广泛应用于软件开发的各个阶段。GitLab的核心是代码库,开发者可以在其中托管和管理项目代码。它还提供了问题跟踪功能,用于记录和管理项目中的任务、缺陷和改进需求。此外,GitLab通过合并请求功能,允许开发者将分支上的代码合并到主干分支,通常伴随着代码审查和测试过程。
GitLab的用途包括但不限于:
- 代码托管:作为一个管理Git存储库的平台,GitLab可以免费托管私有和公共的软件项目。
- 项目管理:提供了问题跟踪和wiki功能,帮助团队协作和项目管理。
- 持续集成/持续部署(CI/CD):GitLab提供了自己的CI系统来管理项目,并提供用户界面以及其他功能。
- 代码审查:通过合并请求功能,GitLab支持代码审查,提高代码质量和安全性。
GitLab与Jenkins的区别
GitLab和Jenkins都是流行的工具,但它们在某些方面有所不同:
-
集成和用途:
- GitLab:是一个完整的DevOps平台,包括源代码管理、CI/CD等。它提供了Git存储库管理、问题跟踪、代码审查和CI/CD管道等功能。
- Jenkins:是一个开源的自动化服务器,主要用于CI/CD管道。它通过插件支持多种功能,如代码分析、测试、部署和监控。
-
技术差异:
- 版本控制:GitLab内置了Git版本控制,而Jenkins需要与单独的VCS工具集成。
- 持续集成和持续交付:GitLab内置了CI/CD功能,而Jenkins也内置了这些功能,但可能需要更多的插件或脚本来实现持续交付。
- 安全和代码审查:GitLab具有内置的安全功能和代码审查功能,而Jenkins需要插件或脚本来实现这些功能。
-
性能和可扩展性:
- GitLab:由于内置Git存储库,通常速度更快,对中小型团队来说可以很好地扩展。
- Jenkins:可能需要额外的资源来提高性能,对大型团队来说可以很好地扩展。
-
成本:
- GitLab:提供免费和付费计划,免费计划包括小团队CI/CD所需的大部分功能。
- Jenkins:是一个可以免费使用的开源工具,但一些高级功能可能需要付费,尤其是企业版。
-
社区和支持:
- GitLab:有一个活跃的开源社区和企业支持。
- Jenkins:有一个庞大的社区和丰富的第三方插件,但管理维护可能需要更多精力。
总结来说,GitLab是一个一体化的DevOps平台,适合那些希望在同一个平台上管理开发流程的团队,而Jenkins则提供了更大的灵活性和深度定制选项,适合需要高度定制化或已有大量Jenkins经验的团队。
GitLab的CI/CD功能介绍
GitLab的CI/CD功能是GitLab内置的持续集成和持续部署工具,它包括以下几个主要部分:
-
持续集成(Continuous Integration, CI):
- 集成团队中每个开发人员提交的代码到代码存储库中。
- 在提交或者合并更改到代码存储库之前,触发构建、测试和新代码验证的管道。
- 帮助在开发周期的早期发现并减少错误。
-
持续交付(Continuous Delivery, CD):
- 确保将经过CI验证的代码交付给应用程序。
- 可以将经过验证的代码更快地移至应用程序。
-
持续部署(Continuous Deployment, CD):
- 在每次推送到仓库默认分支的同时将应用程序部署到生产环境。
-
Pipelines(管道):
- Pipelines由Jobs(作业)和Stages(阶段)组成,定义了构建、测试、部署等自动化流程。
- Jobs是Pipeline中的具体任务,如编译、运行测试、部署。
- Stages是一组按顺序执行的作业。
-
.gitlab-ci.yml文件:
- 位于仓库的根目录下,用于配置GitLab CI/CD的脚本和流程。
-
GitLab Runner:
- 负责执行.gitlab-ci.yml文件中定义的作业。
-
Auto DevOps:
- GitLab CI/CD可以使用Auto DevOps自动构建、测试、部署和监控应用程序。
-
多平台和多语言支持:
- 可以在Unix、Windows、MacOS等平台上执行构建,并且支持多种编程语言。
-
并行构建和实时日志记录:
- 在多台机器上拆分构建以实现快速执行,并提供实时日志记录功能。
-
灵活的管道和版本管道:
- 可以在每个阶段定义多个并行作业,并且可以触发其他构建。
-
构建工件和Docker支持:
- 可以将二进制文件和其他构建工件上载到GitLab,并支持使用自定义Docker映像。
-
容器注册表和受保护的变量:
- 内置的容器注册表用于存储、共享和使用容器映像,以及在部署期间使用受保护的变量安全地存储和使用机密。
-
环境定义:
- 可以定义多个环境,如开发、测试、生产等。
这些功能共同构成了GitLab的CI/CD系统,帮助团队自动化软件开发流程,提高效率和质量。
二、GitLab的安装与配置
Linux下GitLab的安装
-
安装依赖:
在安装GitLab之前,需要安装一些依赖项。对于CentOS系统,通常包括SSH、邮件服务器等:yum -y install curl policycoreutils-python openssh-server openssh-clients postfix
对于Ubuntu系统,可以使用以下命令安装依赖:
sudo apt update sudo apt upgrade -y sudo apt install -y curl openssh-server ca-certificates postfix
-
添加GitLab的仓库:
对于Ubuntu系统,可以使用以下命令添加GitLab的官方仓库:curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
-
安装GitLab包:
对于CentOS系统,可以使用YUM本地安装GitLab:yum localinstall gitlab-ce-版本号.rpm
对于Ubuntu系统,可以使用APT安装GitLab:
sudo EXTERNAL_URL="http://gitlab.linuxtechi.net" apt install gitlab-ce
-
进行初始配置:
安装完成后,需要修改/etc/gitlab/gitlab.rb
文件以进行初始配置。配置完成后,运行以下命令应用更改:gitlab-ctl reconfigure
*Linux下GitLab的简单使用
-
登录GitLab:
访问服务器上GitLab的首页,系统会提示您设置root用户的密码。这是GitLab的管理员账号,您将使用它管理整个GitLab实例。 -
创建Project:
- 安装Git工具:
yum install git -y
- 生成SSH密钥对(如果还没有):
ssh-keygen
- 在GitLab的主页中新建一个Project,并初始化README文件。
- 安装Git工具:
-
常用Git操作:
- 文件提交:
git add <file> git commit -m "commit message" git push
- 分支管理:
git branch <branch-name> git checkout <branch-name> git merge <branch-name>
- 合并请求:
在GitLab中,您可以创建合并请求以请求将代码更改合并到另一个分支中,通常用于代码审查和讨论更改。
- 文件提交:
以上步骤提供了在Linux系统下安装和使用GitLab的基本指南。确保遵守GitLab的最佳实践,这将帮助您更有效地进行代码版本控制和协作开发。
/etc/gitlab/gitlab.rb 的配置
/etc/gitlab/gitlab.rb
是GitLab的配置文件,它用于定义和管理GitLab实例的设置。这个文件是GitLab Omnibus安装包使用的配置文件,包含了GitLab的所有配置选项,如SMTP邮件设置、LDAP集成、备份和恢复、CI/CD构建、Git存储、GitLab Pages等。
.rb
文件指的是Ruby语言的脚本文件,因为GitLab使用Ruby作为其编程语言之一,所以其配置文件也是Ruby脚本格式。这种格式允许GitLab在运行gitlab-ctl reconfigure
命令时,执行Ruby代码来应用配置更改。
/etc/gitlab/gitlab.rb
文件并不是通用的,它是特定于GitLab的配置文件,用于GitLab Omnibus安装。如果你使用的是源码安装或其他类型的安装,配置方式可能会有所不同。对于GitLab Omnibus安装,这个文件是配置GitLab的主要方式,所有的配置更改都需要在这个文件中进行,然后通过运行gitlab-ctl reconfigure
命令来使更改生效。
GitLab服务器的域名
邮箱配置
GitLab的邮箱配置主要用于实现系统自动发送邮件的功能,这对于通知用户各种事件和操作结果非常重要。以下是一些具体的生产应用场景:
-
用户注册与验证:新用户在注册GitLab账户时,可以通过邮箱验证来确认用户的身份,确保注册信息的真实性。
-
密码重置:如果用户忘记密码,在登录页面点击忘记密码后,系统会向用户注册时使用的邮箱发送重置密码的链接,用户通过这个链接可以重置密码。
-
通知邮件:GitLab可以配置推送时发送电子邮件和流水线状态电子邮件,当代码被推送或者CI/CD流水线状态发生变化时,用户可以在指定邮箱接收到通知邮件。
-
Issue和Merge Request:用户可以通过电子邮件创建Issue和Merge Request,GitLab提供了通过电子邮件接收和处理这些请求的功能。
-
邮件通知功能:GitLab的邮件通知功能可以让用户及时收到关于代码推送、修改密码等相关的通知,提高团队协作的效率。
-
新用户注册校验:在GitLab中,可以修改默认的新用户注册校验配置,让新用户注册时通过邮件确认,这样可以减少管理员的工作量,加快新用户的注册流程。
-
邮件发送服务器:在GitLab中配置SMTP邮件发送服务器后,系统可以自动发送通知邮件,包括用户注册、用户找回密码、仓库更新、CI/CD等操作。
通过这些应用,GitLab的邮箱配置增强了用户体验,提高了系统的可用性和安全性。
功能优化
关闭一些暂时不需要的GitLab的功能组件来提升GitLab的启动和运行速度
重新加载gitlab配置
gitlab-ctl reconfigure
操作gitlab运行状态
# 查看gitlab的运行状态
gitlab-ctl status# 停止gitlab的服务
gitlab-ctl stop# 启动gitlab服务
gitlab-ctl start
操作gitlab中的单个的服务
gitlab-ctl start 单个服务名gitlab-ctl stop 单个服务名
查看gitlab的服务的日志
# 查看所有的
gitlab-ctl tail# 查看单独服务的
gitlab-ctl tail nginx
gitlab其他相关的配置文件位置
GitLab发邮件测试
gitlab-rails console
进入后的操作
Notify.test_email('@qq.com','gitlab test','测试').deliver_now
gitlab-rails
和 gitlab-rails console
gitlab-rails 命令的作用
gitlab-rails
命令是 GitLab 提供的一个工具,它允许系统管理员直接与 GitLab 实例的 Rails 应用程序交互。这个命令可以用来执行数据库查询、执行 Rails 代码、故障排除以及执行一些 GitLab Web UI 或 API 不支持的高级管理任务。
“gitlab-rails console” 的作用
gitlab-rails console
是一个命令,它启动了一个 Rails 控制台会话,允许用户通过命令行与 GitLab 实例进行交互。这个控制台提供了对 GitLab 的 Ruby on Rails 环境的访问,使得用户可以获取、更新和查询 GitLab 数据库中的数据。
gitlab-rails 命令的具体使用方法
-
启动 Rails 控制台会话:
- 对于 Omnibus 安装的 GitLab,使用以下命令启动控制台:
sudo gitlab-rails console
- 对于 Docker 安装的 GitLab,使用以下命令:
docker exec -it <container-id> gitlab-rails console
- 对于从源代码手动安装的 GitLab,使用以下命令:
sudo -u git -H bundle exec rails console -e production
- 对于 Kubernetes 部署的 GitLab,控制台位于
toolbox
pod,具体命令如下:kubectl exec -it -c toolbox <toolbox-pod-name> -- gitlab-rails console
要退出控制台,可以输入
quit
。 - 对于 Omnibus 安装的 GitLab,使用以下命令启动控制台:
-
启用 Active Record 日志记录:
在 Rails 控制台会话中,可以通过以下命令启用 Active Record 调试日志的输出:ActiveRecord::Base.logger = Logger.new($stdout)
这会显示由你在控制台中运行的任何 Ruby 代码触发的数据库查询的信息。要关闭日志记录,运行:
ActiveRecord::Base.logger = nil
-
查看对象属性:
使用漂亮打印(pp
)格式化来查看对象的可用属性。例如,确定哪些属性包含用户名和电子邮件地址:u = User.find_by_username('someuser') pp u.attributes
通过这些方法,gitlab-rails
命令提供了一个强大的工具,使得系统管理员能够直接操作和管理 GitLab 实例中的数据。
Rails 应用程序,通常简称为 Rails app,是指使用 Ruby on Rails 框架开发的 Web 应用程序。Ruby on Rails(常简称为 Rails)是一个流行的 Web 应用框架,它遵循 MVC(Model-View-Controller)设计模式,用于编写服务器端的 Ruby 应用程序。
Rails 应用程序的主要特点包括:
-
MVC 架构:
- Model(模型):负责业务逻辑和数据库交互。
- View(视图):负责呈现数据给用户,通常是 HTML 页面。
- Controller(控制器):处理用户输入和业务逻辑,将模型和视图连接起来。
-
约定优于配置:
Rails 提供了一系列约定,以减少配置的复杂性,使得开发者可以快速开发应用程序。 -
RESTful 路由:
Rails 默认支持 RESTful 路由,使得创建符合 REST 架构风格的 Web 服务变得更加容易。 -
Active Record:
Active Record 是 Rails 的 ORM(对象关系映射)框架,它允许开发者使用 Ruby 对象来表示数据库中的行,并提供了丰富的数据库操作接口。 -
Action Pack:
Action Pack 是 Rails 的一个框架,包括 Action View(用于渲染视图)和 Action Controller(用于处理 HTTP 请求)。 -
Rake 任务:
Rails 应用程序可以包含 Rake 任务,这些是可以在命令行中运行的脚本,用于执行自动化任务,如数据库迁移、清理缓存等。 -
插件和宝石(Gems):
Rails 社区提供了大量的插件和宝石,这些是可重用的代码模块,可以扩展 Rails 应用程序的功能。
Rails 应用程序的应用场景:
Rails 应用程序可以用于构建各种类型的 Web 应用程序,包括但不限于:
- 博客和内容管理系统(CMS)
- 电子商务网站
- 社交网络
- 企业资源规划(ERP)系统
- 客户关系管理(CRM)系统
- API 服务
GitLab 本身就是一个使用 Ruby on Rails 框架开发的 Web 应用程序,它提供了版本控制、代码审查、项目管理和 CI/CD 等功能。通过 gitlab-rails
命令,管理员可以访问 Rails 控制台,直接与 GitLab 的数据库和业务逻辑交互。
使用GitLab汉化包
使用汉化包覆盖gitlab配置
## 进入汉化包gitlab-v12.3.5-zh目录的上一级
\cp -a gitlab-v12.3.5-zh/* /opt/gitlab/embedded/service/gitlab-rails/## 重新加载gitlab的配置
gitlab-ctl reconfigure
注:
在Linux命令中,\
用作转义字符,它可以改变紧跟其后的字符的含义。在你提供的命令 \cp -a gitlab-v12.3.5-zh/* /opt/gitlab/embedded/service/gitlab-rails/
中,\
用于转义 cp
命令,使得 cp
命令在执行时不会被 shell 直接解释和执行,而是将其视为普通文本的一部分传递给 gitlab-ctl
命令。
具体来说,\cp
的作用是:
-
防止命令提示:在执行
cp
命令时,如果目标文件已存在,系统会提示用户是否覆盖。使用\
转义cp
命令可以避免这个提示,使得命令在执行时不会暂停等待用户输入,而是直接覆盖目标文件。 -
直接覆盖文件:在自动化脚本中,为了提高效率和避免人为干预,通常会使用
\cp
来直接覆盖目标路径中的文件,而不需要用户确认。 -
避免特殊字符干扰:在某些情况下,如果
cp
命令紧跟着特殊字符或者在特定上下文中,使用\
可以确保cp
命令被正确识别和执行,避免由于特殊字符引起的命令解释错误。
综上所述,\cp
中的 \
是用来转义 cp
命令,确保命令在执行时能够直接覆盖文件,而不需要用户确认,这在自动化脚本和批量处理任务中非常有用。
gitlab重启后报502错误无法登录的解决
在CentOS7系统中安装GitLab服务后,重启出现502错误,无法进入GitLab登录页面,可能的原因及解决方案如下:
1、端口冲突:
GitLab的某些端口(如unicorn或nginx使用的端口)可能被其他服务占用。需要检查并更改这些端口。
检查端口占用情况,可以使用命令netstat -tnlp | grep gitlab
。
修改GitLab配置文件/etc/gitlab/gitlab.rb中的端口设置,例如:
unicorn['port'] = 8099
gitlab_workhorse['auth_backend'] = "http://localhost:8099"
执行gitlab-ctl reconfigure
使配置生效,然后执行gitlab-ctl restart
重启服务。
2、内存不足:
GitLab占用内存过多,导致服务器崩溃。特别是使用阿里云服务器时容易出现502错误。
解决方案是启用swap分区,步骤如下:
- 创建swap文件:dd if=/dev/zero of=/data/swap bs=512 count=8388616
- 建立交换分区:mkswap /data/swap
- 启用交换分区:swapon /data/swap
- 永久启用:echo “/data/swap swap swap defaults 0 0” >> /etc/fstab
3、服务状态检查:
使用gitlab-ctl status
检查GitLab服务状态,确认unicorn等关键服务是否正常运行。
4、日志检查:
检查Unicorn日志文件/var/log/gitlab/unicorn/,查看具体的错误信息。
5、配置文件检查:
检查/etc/gitlab/gitlab.rb配置文件,确保external_url设置正确,指向你的GitLab服务器IP和端口。
6、重启服务:
有时候重启GitLab服务可以解决问题:gitlab-ctl restart
。
通过上述步骤,通常可以解决GitLab服务重启后出现的502错误。如果问题仍然存在,建议详细检查日志文件和配置文件,寻找具体的错误信息。
三、GitLab的Web页面的访问与配置
机器启动gitlab服务
使用配置文件中的自定义域名访问
默认已经有名为root用户且该用户是管理员了,如果需要其他用户,自行注册,或者使用root管理员用户来创建其他用户
如何使用gitlab-rails console修改GitLab的root访问密码
# 进入 gitlab-rails console后
user = User.where(id: 1).firstuser.password='19856920921'
user.password_confirmation='19856920921'
登录后创建项目
注意:本地仓库机器需要配置gitlab机器的域名解析:不然会有下面的报错:
vim /etc/hosts
# 写入:
10.0.0.91 gitlab.louts43.com
之后即可推送成功了:
访问Gitlab仓库即可查看推送信息:
其他机器提交的文件将会保存到gitlab机器的哪个位置中
在CentOS 7上安装GitLab服务后,默认情况下,其他机器提交的文件将会保存到GitLab机器的/var/opt/gitlab/git-data/repositories
目录中。这个目录是GitLab用于存储所有Git仓库数据的地方。
如果需要自定义仓库的存储位置,可以通过修改/etc/gitlab/gitlab.rb
配置文件中的git_data_dirs
部分来实现。例如,如果你想将仓库数据存储到/data/gitlab-data
目录,可以按照以下步骤操作:
- 编辑
/etc/gitlab/gitlab.rb
文件:[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
- 在文件中添加或修改
git_data_dirs
配置项,指定新的仓库存储位置:git_data_dirs({"default" => {"path" => "/data/gitlab-data"} })
- 创建新的目录(如果尚未存在):
[root@gitlab ~]# mkdir -p /data/gitlab-data
- 应用配置更改:
[root@gitlab ~]# gitlab-ctl reconfigure
- 重启GitLab服务以使更改生效:
[root@gitlab ~]# gitlab-ctl restart
请注意,目标路径和其子路径必须不能为软链接,否则GitLab可能无法正确识别和使用这些路径。
如何配置ssh密钥避免每次访问都要输入仓库用户及其密码
本地仓库机器生成ssh公钥配置到GitLab的ssh密钥设置中:
# 本地仓库机器生成ssh公钥
ssh-keygen
生成的数据复制到GitLab中:
要配置GitLab以避免本地机器每次访问远程GitLab仓库都要输入密码,你需要设置SSH密钥。以下是详细的步骤:
-
生成SSH密钥:
- 打开终端(在Windows上是Git Bash)。
- 输入以下命令来生成SSH密钥对:
其中ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
your_email@example.com
替换为你的GitLab注册邮箱。在生成过程中,你可以选择设置密码(passphrase)以增加安全性,或者直接按回车跳过设置密码。
-
找到SSH公钥:
- 生成密钥后,你会在
~/.ssh/
目录下得到两个文件:id_rsa
(私钥)和id_rsa.pub
(公钥)。 - 使用以下命令查看公钥内容:
复制公钥的全部内容。cat ~/.ssh/id_rsa.pub
- 生成密钥后,你会在
-
将SSH公钥添加到GitLab账户:
- 登录到你的GitLab账户。
- 点击右上角的头像,选择“Settings”进入个人设置页面。
- 在左侧菜单中找到“SSH Keys”。
- 点击“Add SSH Key”按钮,将复制的公钥内容粘贴到“Key”输入框中,并为该公钥添加一个描述(Title),然后点击“Add key”按钮完成添加。
-
配置SSH客户端:
- 确保你的SSH客户端(通常是OpenSSH)配置正确。可以通过以下命令检查你的SSH配置:
如果系统询问是否继续连接,输入“yes”。如果配置正确,你将看到一条欢迎信息,表明连接成功。ssh -T git@gitlab.example.com
- 确保你的SSH客户端(通常是OpenSSH)配置正确。可以通过以下命令检查你的SSH配置:
-
使用SSH URL克隆和推送代码:
- 现在你可以使用SSH URL克隆和推送代码到GitLab仓库,无需输入用户名和密码。克隆仓库的命令格式如下:
git clone git@gitlab.example.com:group/project.git
- 这样,你就可以通过SSH实现Git仓库的免密登录,避免每次操作时输入用户名和密码。
- 现在你可以使用SSH URL克隆和推送代码到GitLab仓库,无需输入用户名和密码。克隆仓库的命令格式如下:
按照这些步骤操作后,你应该能够避免在每次访问GitLab仓库时输入密码。
配置ssh免密后的访问仓库的验证
SSH密钥和GPG密钥的配置区别
SSH密钥和GPG密钥是两种不同类型的加密密钥,它们在用途和工作方式上有所不同。下面分别介绍它们的区别和使用方法。
SSH密钥
用途:
SSH(Secure Shell)密钥主要用于网络服务的认证和加密通信。它允许用户在没有密码的情况下远程登录到服务器,也用于确保数据传输的安全性。
组成:
SSH密钥通常成对出现,包括一个私钥和一个公钥。
- 私钥:必须保密,通常保存在用户本地计算机上。
- 公钥:可以公开,通常放置在需要远程访问的服务器上。
使用方法:
- 生成SSH密钥对:使用
ssh-keygen
命令生成一个新的SSH密钥对。ssh-keygen -t rsa -b 4096
- 复制公钥到服务器:使用
ssh-copy-id
命令或手动将公钥内容添加到服务器上的~/.ssh/authorized_keys
文件中。ssh-copy-id user@hostname
- 无密码登录:将公钥添加到服务器后,您可以使用私钥无密码登录到服务器。
ssh user@hostname
GPG密钥
用途:
GPG(GNU Privacy Guard)密钥主要用于数据的加密和数字签名。它用于确保信息的机密性、完整性和来源的真实性。GPG常用于电子邮件加密、文件加密和软件签名。
组成:
GPG密钥也包括一个私钥和一个公钥。
- 私钥:用于加密数据或对数据进行签名,必须保密。
- 公钥:用于解密数据或验证签名,可以公开。
使用方法:
- 生成GPG密钥对:使用
gpg
命令生成一个新的GPG密钥对。gpg --full-gen-key
- 导出公钥:将生成的公钥导出为一个文件,以便分享给他人。
gpg --export -a your_email@example.com > public.key
- 导入公钥:从文件或密钥服务器导入他人的公钥。
gpg --import public.key
- 加密文件:使用GPG加密文件,只有拥有相应私钥的人才能解密。
gpg -r your_email@example.com -e file.txt
- 解密文件:使用私钥解密收到的加密文件。
gpg -d encrypted.file.txt.gpg
- 签名文件:对文件进行签名,他人可以使用您的公钥验证签名。
gpg -s file.txt
- 验证签名:验证签名文件的完整性和来源。
gpg --verify signature.asc file.txt
区别总结
- 用途:SSH密钥主要用于无密码登录和加密通信,而GPG密钥用于数据加密、数字签名和验证。
- 工作方式:SSH使用密钥对进行认证和加密,GPG使用密钥对进行加密和签名。
- 应用场景:SSH密钥常用于SSH服务和Git等版本控制系统的认证,GPG密钥用于电子邮件加密、文件加密和软件签名。
了解SSH密钥和GPG密钥的区别和使用方法,可以帮助您在不同的场景下选择合适的加密工具,保护您的数据安全和通信安全。
GPG(GNU Privacy Guard)密钥在Git项目中的主要用途是进行代码签名和验证,以确保代码的完整性和来源的真实性。以下是如何在Git项目中使用GPG密钥的步骤:
1. 生成GPG密钥对
首先,您需要生成一个GPG密钥对。在命令行中运行以下命令:
gpg --full-gen-key
按照提示操作,设置密钥的长度、有效期、姓名、邮箱等信息。生成后,您将拥有一个私钥和一个公钥。
2. 导出公钥
将您的公钥导出到一个文件中,以便可以添加到Git服务提供商(如GitHub、GitLab等)的账户中。
gpg --armor --export your_email@example.com > public.key
3. 添加公钥到Git服务提供商
登录到您的Git服务提供商账户,并将公钥添加到您的账户设置中。例如,在GitHub中,您可以在“Settings” > “SSH and GPG keys” > “New GPG key”中添加您的公钥。
4. 配置Git使用GPG
在本地Git仓库中配置GPG,以便每次提交时都使用GPG签名。
git config --global user.signingkey your_gpg_key_id
your_gpg_key_id
是您的GPG密钥ID,可以在GPG密钥生成后通过gpg --list-keys
命令找到。
5. 签名提交
在提交代码时,使用-S
标志来对提交进行签名。
git commit -S -m "Your commit message"
这会使用您的私钥对提交进行签名。
6. 签名标签
您也可以对标签进行签名,以确保标签的完整性。
git tag -s v1.0.0 -m "Release version 1.0.0"
7. 验证签名
当您从远程仓库拉取代码或标签时,可以使用以下命令来验证签名:
git verify-commit <commit_id>
git verify-tag <tag_name>
这些命令会检查提交或标签是否由信任的GPG密钥签名。
8. 推送签名的提交和标签
将签名的提交和标签推送到远程仓库:
git push origin main
git push origin v1.0.0
9. 验证推送的签名
在克隆或拉取签名的提交和标签时,您可以使用以下命令来验证签名:
git fetch origin
git show origin/main
git show v1.0.0
这些命令会显示提交或标签的签名状态,包括签名者和签名验证结果。
通过以上步骤,您可以在Git项目中使用GPG密钥来确保代码的完整性和来源的真实性。这对于开源项目和企业级项目来说都是非常重要的,因为它可以帮助维护项目的信任度和安全性。
四、GitLab的备份与转移??
五、
相关文章:
GitLab的使用
文章目录 一、什么是GitLab、有什么用、与Jenkins的区别什么是GitLab及其用途GitLab与Jenkins的区别GitLab的CI/CD功能介绍 二、GitLab的安装与配置Linux下GitLab的安装*Linux下GitLab的简单使用 /etc/gitlab/gitlab.rb 的配置GitLab服务器的域名邮箱配置功能优化关闭一些暂时不…...
ffmpeg.js视频播放(转换)
chrome 临时设置SharedArrayBuffer "C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-featuresSharedArrayBuffer 引用的js及相关文件 ffmpeg.min.js ffmpeg.min.js.map ffmpeg-core.js ffmpeg-core.wasm ffmpeg-core.worker.js 以上几个现…...
免费实用在线AI工具集合 - 加菲工具
免费在线工具-加菲工具 https://orcc.online/ sql格式化 https://orcc.online/tools/sql 时间戳转换 https://orcc.online/tools/timestamp Base64 编码解码 https://orcc.online/tools/base64 URL 编码解码 https://orcc.online/tools/url Hash(MD5/SHA1/SHA256…) 计算 h…...
C# 常量
文章目录 前言一、整数常量(一)合法与非法实例对比(二)不同进制及类型示例 二、浮点常量三、字符常量四、字符串常量五、定义常量 前言 在 C# 编程的世界里,常量是一类特殊的数据元素,它们如同程序中的 “定…...
elasticsearch单节点模式部署
原文地址:elasticsearch单节点模式部署 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 第一步:下载 官方下载地址:Download Elasticsearch | Elastic,可以 wget 直接下载。 命令:wg…...
C#+数据库 实现动态权限设置
将权限信息存储在数据库中,支持动态调整。根据用户所属的角色、特定的功能模块,动态加载权限” 1. 数据库设计 根据这种需求,可以通过以下表设计: 用户表 (Users):存储用户信息。角色表 (Roles):存储角色…...
ubuntu客户端使用飞牛云的smb服务端共享,和ftp记录
ubuntu smb客服端链接 在Ubuntu上设置SMB客户端连接到SMB服务器,你可以使用smbclient工具或者挂载共享目录。以下是使用smbclient和挂载的简单示例: 使用smbclient连接SMB服务器 安装smbclient: sudo apt-update sudo apt-get install smbcli…...
自然语言处理工具-广告配音工具用于语音合成助手/自媒体配音/广告配音/文本朗读-已经解锁了 全功能的 apk包
Android -「安卓端」 广告配音工具用于语音合成助手/自媒体配音/广告配音/文本朗读。 广告配音工具:让您的文字“说话”,在这个快速发展的数字时代,广告配音工具为各种语音合成需求提供了一站式解决方案。无论是自媒体配音、商业广告配音、…...
华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读
随着数据中心规模的不断扩大,服务器的稳定性和可靠性变得尤为重要。华为E9000刀箱(HWE9000V2)作为一款高性能的服务器设备,其硬件状态的实时监控对于保障业务的连续性和系统的稳定运行至关重要。 监控易作为一款专业的IT基础设施监…...
消息队列场景下的前端设计:如何优化用户体验
在现代分布式系统中,消息队列被广泛用于解耦服务和异步处理。但由于消息队列的异步特性,任务提交后无法立即获得处理结果,这给前端的交互设计带来了新的挑战。本文将探讨如何在这种场景下优化前端用户体验。 一、问题分析 在使用消息队列后&…...
智能探针技术:实现可视、可知、可诊的主动网络运维策略
网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代,网络运维的重要性不仅体现在技术层面,更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…...
23种设计模式-装饰器(Decorator)设计模式
文章目录 一.什么是装饰器设计模式?二.装饰器模式的特点三.装饰器模式的结构四.装饰器模式的优缺点五.装饰器模式的 C 实现六.装饰器模式的 Java 实现七.代码解析八.总结 类图: 装饰器设计模式类图 一.什么是装饰器设计模式? 装饰器模式&…...
分布式搜索引擎之elasticsearch单机部署与测试
分布式搜索引擎之elasticsearch单机部署与测试 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的…...
Java项目中加缓存
Java项目中加缓存 1.更新频率低;但读写频率高的数据很适合加缓存; 2.可以加缓存的地方很多:浏览器的缓存;CDN的缓存;服务器的缓存; 本地内存;分布式远端缓存; 加缓存的时候不要…...
【计算机视觉】图像基本操作
1. 数字图像表示 一幅尺寸为MN的图像可以用矩阵表示,每个矩阵元素代表一个像素,元素的值代表这个位置图像的亮度;其中,彩色图像使用3维矩阵MN3表示;对于图像显示来说,一般使用无符号8位整数来表示图像亮度&…...
修改插槽样式,el-input 插槽 append 的样式
需缩少插槽 append 的 宽度 方法1、使用内联样式直接修改,指定 width 为 30px <el-input v-model"props.applyBasicInfo.outerApplyId" :disabled"props.operateCommandType input-modify"><template #append><el-button click…...
高级java每日一道面试题-2024年11月28日-JVM篇-调优命令有哪些?
如果有遗漏,评论区告诉我进行补充 面试官: 调优命令有哪些? 我回答: 在Java高级面试中,调优命令是面试官常问的问题之一。以下是对Java调优命令的详细介绍: 一、主要调优命令 1. jps(JVM Process Status Tool) 功能&#x…...
Dubbo 最基础的 RPC 应用(使用 ZooKeeper)
看国内的一些项目时 Dubbo 这个词经常闪现,一直也不以为然,未作搜索,当然也不知道它是做什么用的。直到最近阅读关于大型网站架构相关的书中反复提到 Dubbo 后,觉得不能再对它视而不见。Google 了一下,它是在阿里巴巴创…...
(0基础保姆教程)-JavaEE开课啦!--11课程(初识Spring MVC + Vue2.0 + Mybatis)-实验9
一、什么是Spring MVC? Spring MVC 是一个基于 Java 的 Web 框架,遵循 MVC 设计模式,用于构建企业级应用程序。它通过控制器(Controller)处理用户请求,模型(Model)处理业务逻辑,视图(View)展示数据,实现了请…...
九、Spring Boot集成Spring Security之授权概述
文章目录 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口前言一、授权概述二、用户权限三、用户授权流程三、Spring Security授权方式1、请求级别授权2、方法级别授权 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口 Spr…...
QT:多ui界面显示
文章目录 1.多ui界面添加2.跳转函数3.返回函数4.Qt5源码工程5.模态显示 1.多ui界面添加 最终生成这个目录 2.跳转函数 void MainWindow::on_pushButton_clicked() {//this->setWindowModality(Qt::WindowModal);test1 *t1 new test1();t1->setParentData(this);this-…...
人工智能在医疗领域应用的案例参考
以下是一些人工智能在医疗领域应用的具体案例: 疾病诊断辅助 谷歌旗下DeepMind与伦敦大学学院医院合作 案例详情:利用人工智能系统对眼部疾病进行诊断,分析眼部扫描图像,快速准确地检测出眼部疾病的早期迹象,如青光眼…...
vue3 与 spring-boot 完成跨域访问
spring-boot,写一个接口用于前端访问,并且给接口设置跨域访问,这里我前端的域名为 localhost:5173 RestController CrossOrigin(origins "http://localhost:5173") public class Vue3Controller {GetMapping("/vue")pu…...
CSS clamp() 函数:构建更智能的响应式设计
在响应式设计中,我们经常需要处理元素大小的动态变化。CSS clamp() 函数提供了一个优雅的解决方案,让我们的设计更加灵活和智能。 clamp() 函数是什么? clamp() 函数接受三个参数: clamp(最小值, 首选值, 最大值)这三个参数分别…...
【C++笔记】数据结构进阶之二叉搜索树(BSTree)
【C笔记】数据结构进阶之二叉搜索树(BSTree) 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】数据结构进阶之二叉搜索树(BSTree)前言一.二叉搜索树的概念二.二叉搜索树的性能分析三.二叉搜索树的实现3.1二叉树的中序…...
c++设计模式模块与系统
c 中lambda 本质就是一个匿名(没有名)的函数; 可以用一个数组元素存储一个函数的指针; 通过数组下标来使用函数; 高内聚低耦合 如何理解设计模式中的高内聚低耦合 高内聚: 用于指导如何组织和划分软件设计。 **定义:**高内聚指的…...
【81-90期】Java核心面试问题深度解析:性能优化与高并发设计
🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 文章题目:Java核心面试问题深度解析:性能优化与高并发设计 摘要: 本文聚…...
python实现TCP服务端,支持对所有客户端的数据收发,支持终端自定义命令操作,提供clear命令一键断开所有的客户端连接
前言 python实现TCP服务端,支持对所有客户端的数据收发,支持终端自定义命令操作,提供clear命令一键断开所有的客户端连接 简单易懂,直接上码 源码 import socket import threadingclass TCPServer:# 修改此处ip 端口def __ini…...
【R安装】R语言的详细安装及环境配置(2024年11月)
目录 R及Rstudio下载R下载Rstudio下载 R及Rstudio安装R安装Rtools 安装Rstudio安装 运行 RStudio通过RStudio配置使用特定的R版本 参考 R及Rstudio下载 R下载 R官网-The R Project for Statistical Computing 点击【download R】,进入下载界面: 选择…...
Android 12.0 通知--PendingIntent基本代码
一. PendingIntent 在 Android 通知中的使用场景 使用场景: Android 通知的 setContentIntent() 需要传入 PendingIntent , 即当点击通知时,执行 intent 的动作.如下例子: //1.创建Intent对象Intent intent new Intent(this, MainActivity1.class); //2.获取能启动 Activity 的…...
网络安全在数字时代保护库存数据中的作用
如今,通过软件管理库存已成为一种标准做法。企业使用数字工具来跟踪库存水平、管理供应链和规划财务。 然而,技术的便利性也带来了网络威胁的风险。黑客将库存数据视为有价值的目标。保护这些数据不仅重要,而且必不可少。 了解网络安全及其…...
文本搜索程序(Qt)
头文件 #ifndef TEXTFINDER_H #define TEXTFINDER_H#include <QWidget> #include <QFileDialog> #include <QFile> #include <QTextEdit> #include <QLineEdit> #include <QTextStream> #include <QPushButton> #include <QMess…...
云原生革命:构建未来应用的无限可能
在这个数字化飞速发展的时代,云原生技术如同一股不可阻挡的潮流,正深刻改变着软件开发和部署的方式。它不仅仅是一种技术变革,更是一场关于如何更高效、更灵活地构建和运行应用的革命。今天,我们就来深入探讨云原生的魅力所在&…...
【Ubuntu 24.04】How to Install and Use NVM
参考 下载 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash激活 Activate NVM: Once the installation script completes, you need to either close and reopen the terminal or run the following command to use nvm immediately. exp…...
android12锁屏界面pin码或者图案解锁居中显示
设置pin码或者图案锁屏后,在锁屏界面向上划左边,图案解锁就在左边, 向上划右边图案就在右边,如何设置一直居中显示呢? diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI…...
【VUE3】新版Vue3+ElementPlus全家桶开发视频项目实战
VUE 介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 Vue.js是一个MVVM(Model - View - ViewModel)的SPA框架。 Model:数…...
【UE5 C++课程系列笔记】05——组件和碰撞
效果 可以看到我们可以实现的功能是 (1)可以通过鼠标旋转视角 (2)通过使用Pawn移动组件来控制Pawn移动 (3)Pawn碰到物体会被阻挡然后逐渐滑动 (4)通过空格切换激活/关闭粒子效果…...
【docker 拉取镜像超时问题】
问题描述 在centosStream8上安装docker,使用命令sudo docker run hello-world 后出现以下错误: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Ti…...
51-基于单片机的智能语音识别与处理系统设计
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,搞L298N驱动两个电机转动,然后搞LCD1602显示屏,弄个超声波传感器实时检测距离 通过LCD1602显示距离,如果距离小于阈值,则两…...
民安:助力提升城市安全水平
随着城市化进程的加速,平安城市的创建成为了社会治理的重要议题。为了解公众对平安城市创建的看法和评价,为提升城市安全水平提供参考,近期某市委托民安智库专业市场调查公司开展了一次安全感满意度调查。 本次调查围绕公共安全、个人安全、…...
类和对象--中--运算符重载、日期类实现(重要)
目录 1.运算符重载 2.日期类 1.运算符重载 2.1作用: 为了让C的新类型:类。也可以进行内置类型的运算符操作。所以就有了运算符重载。 2.2定义: 运算符重载是具有特殊名字的函数,他的名字是由operator和后⾯要定义的运算符共…...
个人回顾。
一鸡摸塔塔开! 2024/11/24 18:20:42 2019.6毕业。入职hg。到2020.6。入职一年。居住侨源山庄极小房间。月租一千。 一鸡摸塔塔开! 2024/11/24 18:21:15 期间也有保持学习。也玩游戏看小说。把大学缺失的补回来。 一鸡摸塔塔开! 2024/11/24 18:30:33 博客园随笔 学习笔记 100…...
前端面试题-1(详解事件循环)
1.了解浏览器的进程模型 1.什么是进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 2.什么是线程?…...
http的文件上传和下载原理
目录 一:上传 1:http请求格式 2:文件上传类型分析 1:md5秒传 2:分片上传 1. 什么是分片上传 2. 分片上传的场景 3:断点续传 1. 什么是断点续传 2. 应用场景 3. 实现断点续传的核心逻辑 4. 实现流…...
leetcode 212. 单词搜索 II
给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words, 返回所有二维网格上的单词 。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一…...
1、数据结构概述及顺序表(附:可以直接打印显示的源码)
《数据结构》概述: 数据结构:数据元素之间的关系(逻辑关系) 数据类型:高地电平 表示 1/0 要做大量的运算:诞生了基本数据类型:int double .....--》反应了数据的取值范围 (int字…...
Redis
概述 Redis(全称 REmote DIctionary Server)是一个开源的内存数据存储系统,它被广泛应用于缓存、消息队列、实时数据存储等场景。Redis 是一个基于内存的数据结构存储,可以作为数据库、缓存和消息中间件使用 优点 高性能…...
Android 13 编译Android Studio版本的Launcher3
Android 13 Aosp源码 源码版本Android Studio版本Launcher3QuickStepLib (主要代码) Launcher3ResLib(主要资源)Launcher3IconLoaderLib(图...
【高等数学学习记录】微分中值定理
一、知识点 (一)罗尔定理 费马引理 设函数 f ( x ) f(x) f(x) 在点 x 0 x_0 x0 的某邻域 U ( x 0 ) U(x_0) U(x0) 内有定义,并且在 x 0 x_0 x0 处可导,如果对任意的 x ∈ U ( x 0 ) x\in U(x_0) x∈U(x0) ࿰…...
百度 文心一言 vs 阿里 通义千问 哪个好?
背景介绍: 在当前的人工智能领域,随着大模型技术的快速发展,市场上涌现出了众多的大规模语言模型。然而,由于缺乏统一且权威的评估标准,很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…...