前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在GitLab CI / CD上使用SSH密钥

在GitLab CI / CD上使用SSH密钥

作者头像
拿我格子衫来
发布2022-01-24 19:51:58
2.4K0
发布2022-01-24 19:51:58
举报
文章被收录于专栏:TopFETopFE

在GitLab CI / CD上使用SSH密钥

上次更新时间:2017-12-13•

Using SSH keys with GitLab CI/CD

GitLab当前不支持在构建环境(运行GitLab Runner的环境)中管理SSH密钥的内置支持。

SSH密钥在以下情况下很有用:

  1. 您想签出内部子模块
  2. 您想使用包管理器(例如Bundler)下载私有包
  3. 您想要将应用程序部署到自己的服务器上,例如Heroku
  4. 您要执行从构建环境到远程服务器的SSH命令
  5. 您想将文件从构建环境同步到远程服务器

如果上述任何事情都响了,那么您很可能需要SSH密钥。

支持最广泛的方法是通过扩展.gitlab-ci.yml,将SSH密钥注入到构建环境中,并且该解决方案可与任何类型的执行程序 (Docker,shell等)一起使用。

这个怎么运作

  1. 使用以下命令在本地创建新的SSH密钥对 ssh-keygen
  2. 将私钥作为变量添加到您的项目中
  3. 运行ssh-agent期间作业以加载私钥。
  4. 将公共密钥复制到您想要访问的服务器上(通常在中 ~/.ssh/authorized_keys),或者 在访问私有GitLab存储库时将其添加为部署密钥

注意: 除非您启用 调试日志 记录,否则私钥将不会显示在作业日志中 。您可能还需要检查 管道可见性

使用Docker执行器时的SSH密钥

当您的CI / CD作业在Docker容器中运行(意味着包含环境)并且您想要在私有服务器中部署代码时,您需要一种访问它的方法。这是SSH密钥对派上用场的地方。

而已!现在,您可以在构建环境中访问私有服务器或存储库。

使用Shell执行程序时的SSH密钥

如果您使用的是Shell执行程序而不是Docker,则设置SSH密钥会更加容易。

您可以从安装了GitLab Runner的计算机生成SSH密钥,并将该密钥用于在该计算机上运行的所有项目。

完成后,尝试登录到远程服务器以接受指纹:

代码语言:javascript
复制
ssh example.com

要访问GitLab.com上的存储库,可以使用git@gitlab.com

验证SSH主机密钥

最好检查私有服务器自己的公用密钥,以确保您不会受到中间人攻击的攻击。万一发生任何可疑事件,您将注意到它,因为作业将失败(如果公钥不匹配,则SSH连接将失败)。

要查找服务器的主机密钥,请ssh-keyscan从受信任的网络(最好从专用服务器本身)运行命令:

代码语言:javascript
复制
## Use the domain name
ssh-keyscan example.com

## Or use an IP
ssh-keyscan 1.2.3.4

创建一个新变量,将其 SSH_KNOWN_HOSTS作为“键”,并作为“值”添加的输出ssh-keyscan

注意: 如果需要连接到多个服务器,则所有服务器主机密钥都需要收集在变量的 Value 中,每行一个密钥。

提示: 通过使用变量而不是 ssh-keyscan 直接在变量内部 .gitlab-ci.yml ,它具有以下优点: .gitlab-ci.yml 如果主机域名由于某些原因而更改,则不必更改。而且,这些值是由您预定义的,这意味着如果主机密钥突然更改,CI / CD作业将失败,并且您将知道服务器或网络出了点问题。

现在SSH_KNOWN_HOSTS已经创建了变量,除了 上面的 内容.gitlab-ci.yml之外,还需要添加以下内容:

代码语言:javascript
复制
before_script:
  ##
  ## Assuming you created the SSH_KNOWN_HOSTS variable, uncomment the
  ## following two lines.
  ##
  - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts

  ##
  ## Alternatively, use ssh-keyscan to scan the keys of your private server.
  ## Replace example.com with your private server's domain name. Repeat that
  ## command if you have more than one server to connect to.
  ##
  #- ssh-keyscan example.com >> ~/.ssh/known_hosts
  #- chmod 644 ~/.ssh/known_hosts

  ##
  ## You can optionally disable host key checking. Be aware that by adding that
  ## you are susceptible to man-in-the-middle attacks.
  ## WARNING: Use this only with the Docker executor, if you use it with shell
  ## you will overwrite your user's SSH config.
  ##
  #- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config'

示例项目

为了方便起见,我们建立了一个示例SSH项目,使用我们的公共 共享运行程序在GitLab.com上运行。

想要破解吗?只需对其进行分叉,提交并推送您的更改。稍后,公共跑步者将选择更改并开始工作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在GitLab CI / CD上使用SSH密钥
  • Using SSH keys with GitLab CI/CD
    • 这个怎么运作
      • 使用Docker执行器时的SSH密钥
        • 使用Shell执行程序时的SSH密钥
          • 验证SSH主机密钥
            • 示例项目
            相关产品与服务
            容器镜像服务
            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档