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

Bitbucket Pipelines连接DigitalOcean Droplet SSH登录失败解决

报错根因

atlassian/ssh-run 管道默认优先走SSH密钥认证逻辑,不会自动读取你配置里的PASSWORD字段走密码认证,只要没在Pipelines里配置默认SSH密钥就会直接抛出✖ No default SSH key configured in Pipelines错误,你写的密码参数根本没被触发使用。

修复方案

优先选SSH密钥认证的方式,安全性更高,也是Bitbucket官方推荐的做法,实在需要用密码认证再看第二个方案。

方案1:配置SSH密钥认证(推荐)

  • 本地终端执行以下命令,生成专门给部署用的无密码ed25519密钥对:
    ssh-keygen -t ed25519 -C "bitbucket-pipeline-deploy" -f ~/bb-deploy-key
    
    执行后一路回车即可,会在本地用户目录下生成bb-deploy-key(私钥)和bb-deploy-key.pub(公钥)两个文件。
  • 把公钥上传到你的DigitalOcean Droplet,执行命令时替换成你实际的服务器公网IP:
    ssh-copy-id -i ~/bb-deploy-key.pub root@<你的Droplet公网IP>
    
    按提示输入root密码,完成公钥写入,这步做完之后用这个私钥就能免密登录服务器。
  • 登录Bitbucket打开对应仓库,进入 Repository settings → Pipelines → SSH keys 页面:
    • 选择Use my own keys,把bb-deploy-key里的私钥内容粘贴到私钥输入框,bb-deploy-key.pub里的公钥内容粘贴到公钥输入框,点击保存。
    • 同一页面下拉到Known hosts板块,输入你的Droplet公网IP,点击Fetch自动拉取服务器主机指纹并保存,避免首次SSH连接时因为主机确认提示卡住流水线。
  • 修改bitbucket-pipelines.yml里的部署步骤,删掉无效的PASSWORD字段,修正SERVER为实际IP,改完片段如下:
    - step:
        name: deploy
        deployment: test
        script:
          - echo "Deploying master to live"
          - pipe: atlassian/ssh-run:0.1.4
            variables:
              SSH_USER: 'root'
              SERVER: '替换成你Droplet的实际公网IP'
              COMMAND: 'ci-scripts/pull-deploy-master.sh'
              MODE: 'script'
    
  • 把修改后的配置提交推送到仓库,重跑流水线即可正常连接部署。

方案2:强制使用密码认证(不推荐,存在泄露风险)

如果一定要用密码登录,需要先安装sshpass依赖,再加SSH参数强制禁用公钥认证、启用密码认证,修改配置如下:

- step:
    name: deploy
    deployment: test
    script:
      - echo "Deploying master to live"
      - apt-get update && apt-get install -y sshpass
      - pipe: atlassian/ssh-run:0.1.4
        variables:
          SSH_USER: 'root'
          SERVER: '替换成你Droplet的实际公网IP'
          PASSWORD: '你的root用户密码'
          COMMAND: 'ci-scripts/pull-deploy-master.sh'
          MODE: 'script'
          SSH_ARGS: '-o StrictHostKeyChecking=no -o PreferredAuthentications=password -o PubkeyAuthentication=no'

注意:不要把密码明文硬编码在配置文件里,建议把密码存在Bitbucket仓库的Pipeline变量中,用变量名引用,避免代码泄露时密码同时被盗。

额外排查点
  • 确认DigitalOcean后台的防火墙、服务器内部的ufw防火墙都放开了22端口,允许Bitbucket流水线的出口IP访问,否则会出现连接超时。
  • 登录服务器确认ci-scripts/pull-deploy-master.sh路径正确,且已经给脚本加了可执行权限(执行chmod +x ci-scripts/pull-deploy-master.sh),避免SSH连接成功后脚本执行失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:46:01