You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过无密码脚本将Docker容器内文件传输至本地(Bitbucket Pipelines环境)

解决Bitbucket Pipelines容器无密码传输文件到本地的方案

核心问题分析

你之前的操作搞反了SSH认证方向:把本地公钥放到容器的authorized_keys是用来让本地机器登录容器的,但现在需要容器主动连接本地机器,所以应该让容器持有能访问本地机器的SSH私钥,同时本地机器的authorized_keys添加对应公钥。

可行方案一:使用Bitbucket安全变量传入SSH私钥

这是最适合流水线自动化的方案,步骤如下:

  1. 本地机器准备

    • 生成一对SSH密钥(如果没有的话):ssh-keygen -t ed25519 -C "bitbucket-pipeline"
    • 将公钥添加到本地机器的~/.ssh/authorized_keys文件:cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
    • 确保本地机器的SSH服务允许密钥登录,且端口(默认22)能被Bitbucket Pipelines的容器访问(需要公网IP或内网打通)
  2. Bitbucket配置

    • 进入仓库的Settings > Repository variables,添加一个名为SSH_PRIVATE_KEY的变量,值为刚才生成的私钥内容(~/.ssh/id_ed25519里的文本),勾选Secured选项加密存储
  3. 流水线脚本配置(bitbucket-pipelines.yml)
    在步骤中添加密钥配置和scp命令:

    pipelines:
      default:
        - step:
            script:
              # 创建SSH目录并设置权限
              - mkdir -p ~/.ssh
              - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
              - chmod 600 ~/.ssh/id_ed25519
              # 提前扫描本地机器的SSH密钥,避免首次连接的确认提示
              - ssh-keyscan <你的本地机器IP/域名> >> ~/.ssh/known_hosts
              # 执行scp传输文件
              - scp /容器内目标文件路径 <本地用户名>@<本地机器IP>:<本地存储路径>
    

可行方案二:使用Bitbucket Artifacts(非直接传本地)

如果不需要自动传到本地机器,只是需要保留流水线生成的文件,可以用Bitbucket的Artifacts功能:

pipelines:
  default:
    - step:
        script:
          - # 你的构建/生成文件的命令
        artifacts:
          - /容器内目标文件路径/**

执行完流水线后,可在Bitbucket的流水线页面下载这些文件,也可以通过Bitbucket API自动化拉取到本地。

常见坑点

  • SSH密钥权限必须严格设置为600,否则SSH会拒绝使用该密钥
  • 必须添加ssh-keyscan步骤,否则首次连接会弹出确认提示,导致脚本卡住
  • 本地机器要确保防火墙开放SSH端口,且能被Bitbucket Pipelines的公网IP访问(可在Bitbucket文档中查询Pipelines的IP段,添加到白名单)

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:22:33