如何为 gitlab.com 托管项目生成 SSH 密钥?

如何为 gitlab.com 托管项目生成 SSH 密钥?

我有一个项目托管在 gitlab.com 上作为私有存储库。当代码推送到 master 分支时,我想使用 gitlab ci/cd 自动将我的项目部署到远程服务器 QA_SERVER。以下是迄今为止的 .gitlab-ci.yml 内容:

image: ubuntu:latest
stages:
  - deploy
deploy_QA:
  stage: deploy
  environment: 
    name: Staging
    url: "$QA_URL"
  before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - mkdir -p ~/.ssh
  - eval $(ssh-agent -s)
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  script:
    - ssh-add <(echo "$PRIVATE_KEY")
    - ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'
    - scp -P22 -r . ubuntu@"$QA_SERVER":/var/www/html

我需要生成私钥并将其作为变量 PRIVATE_KEY 存储在 gitlab 项目中。如何生成此密钥?我需要运行 ssh-keygen 吗?在哪里运行它?

请注意给出的指令

这里

我不清楚。

答案1

您提供的链接提供了所有信息。分步说明:

  1. 在您的本地机器上运行ssh-keygen
    • 你必须这样做不是用密码保护您的密钥 - 否则它不能在非交互式脚本中使用。
    • 对密钥使用非默认文件路径可能是明智之举。我们假设其为~/.ssh/ubuntu_rsa。具体名称无关紧要。
  2. 密钥生成后,您将在指定位置拥有 2 个文件:ubuntu_rsaubuntu_rsa.pub. 出于安全原因,请确保ubuntu_rsa只有您可以访问(例如chmod 600 ~/.ssh/ubuntu_rsa
  3. 您需要访问 CI 作业将使用的 QA_SERVER 上的帐户,并且必须可以通过 ssh 访问 - 从脚本中我假设它的Ubuntu
  4. 使用ssh-copy-id将公钥添加到 QA_SERVER 以Ubuntu: ssh-copy-id -i ~/.ssh/ubuntu_rsa.pub ubuntu@QA_SERVER. 系统将提示您输入Ubuntu户口密码。
  5. 在你的项目中添加 gitlab 变量 -查看文档。假设它名为 SSH_PRIVATE_KEY,并将其值设置为~/.ssh/id_rsa来自本地机器的值。
  6. 你的 gitlab-ci.yml 中的脚本必须包含类似以下内容:
SRC_DIR=. # replace with whatever is needed here
echo $SSH_PRIVATE_KEY | ssh-add
scp -r $SRC_DIR ubuntu@QA_SERVER:/var/www/html

相关内容