【问题标题】:SSH into staging machine from docker instance using Bitbucket Pipelines使用 Bitbucket Pipelines 从 docker 实例 SSH 到登台机器
【发布时间】:2016-09-25 04:43:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: authentication ssh docker public-key bitbucket-pipelines


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-09-30
      • 2018-10-07
      • 2017-03-31
      • 2017-11-24
      • 2021-10-24
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      相关资源
      最近更新 更多