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

时间:2017-01-05 17:38:57

标签: git ssh deployment server gitlab

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

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

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

我认为通过密钥从CI版本连接到远程SSH是一种常见的场景。

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:6)

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

以下是您的需求:

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

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

- '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'

然后进行SSH连接并发表声音!

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

答案 1 :(得分:0)

请参阅GitLab的CI / CD文档中的详细示例-

Using SSH keys with GitLab CI/CD
(该示例与Jawad的示例有些不同
并且我在这里没有故意引用它,因为将来它可能会更改)

要将您的公钥获取到远程主机,请参见此处的(三个)示例:

How to Upload an SSH Public Key to an Existing Droplet