如何使用来自GitLab管道的密钥通过SSH连接到目标服务器?

Ser*_*rov 5 git deployment ssh gitlab server

当GitLab管道成功时,我希望通过SSH使用公钥连接到服务器.

正如我所见,我需要在GitLab端使用ssh-keygen生成一个密钥,并将其添加到我想要连接的服务器.

我可以在管道期间生成密钥,但由于公钥未添加到目标服务器,因此没有意义.

我认为通过密钥将CI从CI构建连接到远程SSH是一种常见的情况.

我怎样才能使它工作?

Jaw*_*wad 7

只要在适当的服务器上使用适当的密钥,就可以从任何地方运行ssh-keygen.

这是你需要的:

  • 生成密钥对
  • 私钥复制到gitlab CI变量(让我们称之为SSH_PRIVATE_KEY)
  • 复制公开密钥到服务器gitlab将连接并将其添加到您的~/.ssh/authorized_keys文件
  • 告诉您的CI管道使用存储在Gitlab CI变量中的私钥

为了完成最后一步,只需在您.gitlab-ci.yml感兴趣的作业的脚本或before_script部分中添加以下内容:

- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
Run Code Online (Sandbox Code Playgroud)

然后做你的SSH连接和voilà!

编辑:我不记得我第一次在哪里找到这个信息但是这里是:https://docs.gitlab.com/ee/ci/ssh_keys/README.html

  • 如答案中所述,只要将私钥复制到Gitlab CI变量并将公钥文件复制到目标服务器,就可以在任何地方生成SSH密钥。 (2认同)