使用Bitbucket管道从docker实例SSH到staging机器

Spe*_*edy 8 authentication ssh public-key docker bitbucket-pipelines

使用新的Bitbucket管道功能,如何从它旋转的docker容器SSH到我的分段盒?

我的管道中的最后一步是.sh在登台时部署必要代码的文件,但由于我的登台框使用公钥认证而不知道docker容器,因此SSH连接被拒绝.

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

Mat*_*att 6

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

创建一个Docker镜像.

使用ssh密钥在某处创建Docker镜像.该映像还需要为您的环境保存主机密钥,主机密钥将保存在容器将运行的用户下.这通常是root用户,但如果你有一个USER命令可能会有所不同Dockerfile.

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

RUN ssh-keyscan your.staging-host.com
Run Code Online (Sandbox Code Playgroud)

发布图像

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

配置管道

配置使用docker镜像构建的管道.

如果您使用Docker Hub

image:
  name: account-name/java:8u66
  username: $USERNAME
  password: $PASSWORD
  email: $EMAIL
Run Code Online (Sandbox Code Playgroud)

或者您自己的外部注册表

  name: docker.your-company-name.com/account-name/java:8u66
Run Code Online (Sandbox Code Playgroud)

限制主机上的访问权限

您不希望使用ssh密钥访问遍布全球的主机,因此我还限制访问这些部署ssh密钥以仅运行您的部署命令.

authorized_keys登台主机上的文件:

command="/path/to/your/deploy-script",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-dss AAAAC8ghi9ldw== deploy@bitbucket
Run Code Online (Sandbox Code Playgroud)

不幸的是,bitbucket 不会发布IP列表来限制 对管道的共享基础架构的访问.如果他们碰巧在AWS上运行,那么亚马逊会发布IP列表.

from="10.5.0.1",command="",no-... etc
Run Code Online (Sandbox Code Playgroud)

还记得和他们约会,不时让他们过期.我知道ssh键不强制执行日期,但无论如何都要做到这一点.