使用新的 Bitbucket Pipelines 功能,我如何从它启动的 docker 容器通过 SSH 连接到我的暂存箱?
我的管道的最后一步是一个.sh
文件,它在登台上部署必要的代码,但是因为我的登台箱使用公钥身份验证并且不知道 docker 容器,所以 SSH 连接被拒绝。
无论如何在不使用 SSH 密码身份验证的情况下解决这个问题(这也导致了我不断选择通过公钥进行身份验证的问题。)?
使用新的 Bitbucket Pipelines 功能,我如何从它启动的 docker 容器通过 SSH 连接到我的暂存箱?
我的管道的最后一步是一个.sh
文件,它在登台上部署必要的代码,但是因为我的登台箱使用公钥身份验证并且不知道 docker 容器,所以 SSH 连接被拒绝。
无论如何在不使用 SSH 密码身份验证的情况下解决这个问题(这也导致了我不断选择通过公钥进行身份验证的问题。)?
Bitbucket 管道可以使用您创建的 Docker 映像,该映像具有在构建期间运行的 ssh 客户端设置,只要它托管在可公开访问的容器注册表上即可。
使用您在某处可用的 ssh 密钥创建 Docker 映像。映像还需要将环境的主机密钥保存在容器将运行的用户下。这通常是root
用户,但如果您USER
的Dockerfile
.
您可以在映像构建时复制已填充的known-hosts
文件或动态配置文件:
RUN ssh-keyscan your.staging-host.com
将您的图像发布到可公开访问但私有的注册表。你可以自己托管或使用像Docker Hub这样的服务。
如果你使用 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 密钥不强制执行日期,但无论如何这样做是个好主意。
您现在可以在管道设置下设置 SSH 密钥,这样您就不需要拥有私有 docker 映像来存储 ssh 密钥。它也是从您的源代码中提取的,因此您的存储库中也没有它。
在下面
Settings -> Pipelines -> SSH keys
您可以提供密钥对或生成新的密钥对。私钥将被放入 docker 容器中,~/.ssh/config
并为您提供一个公钥,您可以将其放入您的主机中的~/.ssh/authorized_keys
文件中。当在 docker 上运行时,该页面还需要一个 ip 或名称来设置已知主机的指纹。
此外,Bitbucket 提供了 IP 地址,如果需要,您可以将其列入白名单,以便启动 docker 容器。他们目前是: