【问题标题】:How to connect to a target server via SSH with a key from a GitLab pipeline?如何使用 GitLab 管道中的密钥通过 SSH 连接到目标服务器?
【发布时间】:2020-04-14 07:16:19
【问题描述】:

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

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

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

我认为使用密钥从 CI 构建连接到远程 SSH 是一种常见情况。

我怎样才能让它工作?

【问题讨论】:

    标签: git ssh deployment server gitlab


    【解决方案1】:

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

    这是你需要的:

    • 生成密钥对
    • 将 private 密钥复制到 gitlab CI 变量(我们称之为 SSH_PRIVATE_KEY)
    • 将 public 密钥复制到 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

    【讨论】:

    • 也许是一个愚蠢的问题,但是在哪里生成 ssh 密钥?我假设您需要在目标服务器上生成它们。
    • 回答中提到,只要将私钥复制到Gitlab CI变量,并将公钥文件复制到目标服务器,就可以在任何地方生成SSH密钥
    • 这样安全吗?我的意思是,这些只是变量,人们把他们的整个生命都放在那里,冒着被暴露和/或被黑客攻击的风险。我是不是偏执狂?
    【解决方案2】:

    查看 GitLab 的 CI/CD 文档中的详细示例 -

    Using SSH keys with GitLab CI/CD
    (这个例子和Jawad的例子有点不同
    我不是故意在这里引用它,因为它将来可能会改变)

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

    How to Upload an SSH Public Key to an Existing Droplet

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-11
      • 2021-01-15
      • 2023-03-16
      • 2011-05-21
      • 1970-01-01
      • 2021-03-09
      • 2012-06-21
      • 2012-11-26
      相关资源
      最近更新 更多