使用 Bitbucket Pipelines 从 docker 实例 SSH 到登台机器

Posted

技术标签:

【中文标题】使用 Bitbucket Pipelines 从 docker 实例 SSH 到登台机器【英文标题】:SSH into staging machine from docker instance using Bitbucket Pipelines 【发布时间】:2016-09-25 04:43:45 【问题描述】:

使用新的 Bitbucket Pipelines 功能,我如何从它启动的 docker 容器通过 SSH 连接到我的暂存箱?

我的管道的最后一步是一个.sh 文件,它在暂存时部署必要的代码,但是因为我的暂存盒使用公钥身份验证并且不知道 docker 容器,所以 SSH 连接被拒绝。

在不使用 SSH 密码身份验证的情况下解决这个问题(这也会导致我不断选择通过公钥进行身份验证。)?

【问题讨论】:

【参考方案1】:

Bitbucket 管道可以使用您创建的 Docker 映像,该映像具有在构建期间运行的 ssh 客户端设置,只要它托管在可公开访问的容器注册表上。

创建一个 Docker 镜像。

Create a Docker image 你的 ssh 密钥在某处可用。该图像还需要在容器将运行的用户下具有host key for your environment(s) saved。这通常是root 用户,但如果您的Dockerfile 中有USER 命令,则可能会有所不同。

您可以复制已填充的 known-hosts 文件,或在映像构建时动态配置文件:

RUN ssh-keyscan your.staging-host.com

发布图片

将您的图像发布到可公开访问但私有的注册表。您可以host your own 或使用Docker Hub 之类的服务。

配置管道

Configure pipelines to build with your docker image.

如果你使用 Docker Hub

image:
  name: account-name/java:8u66
  username: $USERNAME
  password: $PASSWORD
  email: $EMAIL

或您自己的外部注册表

  name: docker.your-company-name.com/account-name/java:8u66

限制对主机的访问

您不想让 ssh 密钥访问您在世界各地飞行的主机,因此我还将这些部署 ssh 密钥的访问权限限制为 only run your deploy commands。

暂存主机上的authorized_keys 文件:

command="/path/to/your/deploy-script",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-dss AAAAC8ghi9ldw== deploy@bitbucket

不幸的是 bitbucket don't publish an IP list to restrict access to,因为他们使用共享基础架构进行管道。如果它们碰巧在 AWS 上运行,那么亚马逊会使用 publish IP lists。

from="10.5.0.1",command="",no-... etc

还记得时不时地给它们约会并让它们过期。我知道 ssh 密钥不会强制执行日期,但无论如何这样做是个好主意。

【讨论】:

嗨@Matt,公开访问但在私有注册表中的安全性如何? @JamesLin 与您在外部基础设施上托管的任何其他服务一样安全,如今这几乎是一切。您是否相信托管注册表的公司可以保证其安全? 我问的原因是,当它可以公开访问,但注册表是私有的,如果有人知道注册表名称,他们可以下载吗? 公共托管的私有注册表应始终要求authentication for access。【参考方案2】:

您现在可以在管道设置下设置 SSH 密钥,这样您就不需要拥有私有 docker 映像来存储 ssh 密钥。它也是从您的源代码中提取的,因此您的存储库中也没有它。

Settings -> Pipelines -> SSH keys

您可以提供密钥对或生成新的密钥对。私钥将被放入位于~/.ssh/config 的docker 容器中,并为您提供一个公钥,您可以将其放入您的主机中的~/.ssh/authorized_keys 文件中。当在 docker 上运行时,该页面还需要一个 ip 或名称来设置已知主机的指纹。

此外,Bitbucket 还提供了 IP 地址,如果需要,您可以将其列入白名单,以便启动 docker 容器。他们是currently:

34.236.25.177/32 34.232.25.90/32 52.203.14.55/32 52.202.195.162/32 52.204.96.37/32 52.54.90.98/32 34.199.54.113/32 34.232.119.183/32 35.171.175.212/32

【讨论】:

以上是关于使用 Bitbucket Pipelines 从 docker 实例 SSH 到登台机器的主要内容,如果未能解决你的问题,请参考以下文章

Bitbucket Pipelines - 具有相同步骤的多个分支

使用 Bitbucket Pipelines 和 Docker 的 Android CI

使用 BitBucket Pipelines 通过 SSH 访问部署到 VPS

Bitbucket Pipelines apt-get 停止工作

如何在 Bitbucket-Pipelines 中保存工件

Docker BitBucket管道中缺少区域设置nl_NL