8

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

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

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

4

2 回答 2

6

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

创建 Docker 映像。

使用您在某处可用的 ssh 密钥创建 Docker 映像。映像还需要将环境的主机密钥保存在容器将运行的用户下。这通常是root用户,但如果您USERDockerfile.

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

RUN ssh-keyscan your.staging-host.com

发布图像

将您的图像发布到可公开访问但私有的注册表。你可以自己托管或使用像Docker Hub这样的服务。

配置管道

配置管道以使用您的 docker 映像进行构建

如果你使用 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 密钥的访问,使其仅运行您的部署命令

authorized_keys暂存主机上的文件:

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

不幸的是,bitbucket没有发布 IP 列表来限制访问, 因为他们使用共享基础设施进行管道。如果它们恰好在 AWS 上运行,那么亚马逊会发布 IP 列表

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

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

于 2016-05-27T02:08:58.453 回答
2

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

在下面

Settings -> Pipelines -> SSH keys

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

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

  • 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
于 2017-03-08T20:47:17.123 回答