使用新的 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 容器。他们目前是: