使用 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