将 SSH 私钥存储在 GitLab 存储库变量中

问题描述 投票:0回答:3

使用 GitLab CI,我想将生产代码推送到远程虚拟主机。

为了使用 SSH 连接,我将密钥对的私钥存储在我的 GitLab 存储库的变量中。我还将公钥复制到服务器的授权密钥中。这是我的

.gitlab-ci.yml
(的一部分)。

image: ubuntu

before_script:
  # Setup SSH credentials and known host
  - which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
  - mkdir -p ~/.ssh
  - echo "$SSH_PRIVATE" | tr -d '\r' > ~/.ssh/id_rsa
  - chmod 700 ~/.ssh/id_rsa
  - eval "$(ssh-agent -s)"
  - ssh-add ~/.ssh/id_rsa
  - echo "$SSH_KNOWN_HOSTS"
  - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts

这个方法可行,但我质疑它的安全性。这样我的私钥安全吗?我还能如何实现我正在寻找的结果?

编辑:我特别质疑这种方法在生产环境中的安全性。

ssh gitlab
3个回答
3
投票

官方示例位于 gitlab-examples/ssh-private-key

.gitlab-ci.yml
使用自定义环境变量
SSH_PRIVATE_KEY
,如“如何使用 GitLab CI/CD 简化智能家居配置/准备服务器(和 GitLab)以进行 SSH 访问”中所述。

只要变量被屏蔽,这应该足够安全。


sneaky建议在评论中创建一个预处理文件:

cat id_rsa | base64 -w0
插入到
script-part
中您工作的
.gitlab-ci.yml

mkdir -p ~/.ssh && echo "$SSH_PRIVATE_KEY" | \
  base64 -d > ${SSH_KEY_FILE} && chmod 0600 ${SSH_KEY_FILE}

1
投票

我已经能够通过在源上编码值然后动态解码来绕过这个问题。

在我的 Makefile 上:

KEY=$(shell base64 -w 0 private-key-file)

在 .gitlab-ci.yml 文件上:

- echo $SSH_PRIVATE_KEY | base64 -d |tr -d '\r' | ssh-add -

然后我打电话给 gitlab-runner

gitlab-runner exec docker ${build_target} --env 'SSH_PRIVATE_KEY=${KEY}'


0
投票

image: ubuntu:latest # 替换为你想要的 Docker 镜像

阶段:

  • 执行脚本 之前_脚本:

设置 SSH 凭据和已知主机

  • 哪个 ssh 代理 || ( apt-get update -y && apt-get install openssh-client -y )
  • mkdir -p ~/.ssh
  • 回显“$SSH_PRIVATE”| tr-d' ' > ~/.ssh/id_rsa
  • chmod 700 ~/.ssh/id_rsa
  • 评估“$(ssh-agent -s)”
  • ssh-添加〜/.ssh/id_rsa
  • 回显“$SSH_KNOWN_HOSTS”
  • 回显“$SSH_KNOWN_HOSTS”>~/.ssh/known_hosts
  • chmod 644 ~/.ssh/known_hosts

执行脚本: 阶段:执行脚本 脚本: - ssh -i "${PRIVATE_KEY}" "${USERNAME}@${HOSTNAME}" "sh /home/demo/print-perfecto/script.sh"


在gitlab中添加变量:

SSH_PRIVATE - ssh-keygen -> cp public-key to paste auth-key -> cp private file then paste in variables.

HOSTNAME - ip address

USERNAME - username
SSH_KNOWS_HOST - type in local or server -> (ssh-keyscan -H you-ip) - few line output comes - take all output cp and save in variables.
© www.soinside.com 2019 - 2024. All rights reserved.