使用 Bitbucket 管道从 docker 实例通过 SSH 连接到登台机

SSH into staging machine from docker instance using Bitbucket Pipelines

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

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

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

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

创建 Docker 图片。

Create a Docker image with your ssh key available somewhere. The image also needs to have the host key for your environment(s) saved 用户容器将 运行 作为。这通常是 root 用户,但如果您在 Dockerfile 中有 USER 命令,则可能会有所不同。

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

RUN ssh-keyscan your.staging-host.com

发布图片

将您的图像发布到可公开访问但私有 的注册表。你可以 host your own or use a service like Docker Hub.

配置管道

Configure pipelines to build with your docker image.

如果您使用 Docker 集线器

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 as they use shared infrastructure for pipelines. If they happen to be running on AWS then Amazon do publish IP lists

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

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

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

之下
Settings -> Pipelines -> SSH keys

您可以提供密钥对或生成新密钥对。私钥将放在 ~/.ssh/config 的 docker 容器中,并为您提供一个 public 密钥,您可以将其放入主机的 ~/.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