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

Bitbucket Pipeline部署EC2时Load key格式无效错误的排查与解决

问题描述

我正在用Bitbucket Pipeline将应用部署到EC2服务器,以下是我的配置和遇到的错误:

bitbucket-pipelines.yaml 配置

image: atlassian/default-image:3

pipelines:
  branches:
    dev:
      - step:
          name: automated deployment
          script:
            - pipe: atlassian/scp-deploy:1.2.1
              variables:
                USER: 'ubuntu'
                SERVER: $SERVER_IP
                REMOTE_PATH: '/home/ubuntu/utags-test/server'
                LOCAL_PATH: '${BITBUCKET_CLONE_DIR}/*' 
            - pipe: atlassian/ssh-run:0.4.1
              variables:
                SSH_USER: 'ubuntu'
                SERVER: $SERVER_IP
                COMMAND: 'cd /home/ubuntu/utags-test/server;docker pull paranjay1/utags-paranjay:dev;docker-compose down;docker-compose up -d'
                SSH_KEY: $SERVER_PRIVATE_KEY 
                DEBUG: 'true'
          services:
            - docker   

错误日志

Build setup13s

pipe: atlassian/scp-deploy:1.2.1
....
....
Digest: sha256:b9111f61b5824ca7ed1cb63689a6da55ca6d6e8985eb778c36a5dfc2ffe776a8
Status: Downloaded newer image for bitbucketpipelines/scp-deploy:1.2.1
INFO: Configuring ssh with default ssh key.
INFO: Adding known hosts...
INFO: Appending to ssh config file private key path
INFO: Applied file permissions to ssh directory.
✔ Deployment finished.

pipe: atlassian/ssh-run:0.4.1
....
....
Digest: sha256:b8ff5416420ef659869bf1ea6e95502b8fa28ccd5e51321e4832d9d81fdefc18
Status: Downloaded newer image for bitbucketpipelines/ssh-run:0.4.1
INFO: Executing the pipe...
INFO: Using passed SSH_KEY
INFO: Executing command on 13.235.33.118
ssh -A -tt -i /root/.ssh/pipelines_id -o StrictHostKeyChecking=no -p 22 ubuntu@13.235.33.118 bash -c 'cd /utags-test/server;docker pull paranjay1/utags-paranjay:dev;docker-compose down;docker-compose up -d'
Load key "/root/.ssh/pipelines_id": invalid format
Load key "/root/.ssh/pipelines_id": invalid format
ubuntu@13.235.33.118: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
✖ Execution failed.

已完成的前置操作:

  • EC2服务器已安装Docker和docker-compose
  • 在Bitbucket的SSH密钥部分生成了密钥,公钥已添加到EC2的authorized_keys文件中
  • $SERVER_PRIVATE_KEY变量存储EC2服务器的私钥
  • $SERVER_IP变量存储EC2公网IP

错误成因分析
  1. 私钥格式不合法:日志里的Load key "/root/.ssh/pipelines_id": invalid format明确说明,Bitbucket Pipeline读取到的$SERVER_PRIVATE_KEY内容不符合SSH私钥的标准格式。常见诱因包括:
    • 粘贴私钥到Bitbucket变量时丢失了换行符
    • 私钥缺失开头/结尾的标识行(比如-----BEGIN OPENSSH PRIVATE KEY-----)
    • 变量值被自动添加了多余的空格或转义字符
  2. 密钥使用逻辑混淆:你提到在Bitbucket生成了密钥对并把公钥放到EC2,但配置里却用了EC2本身的私钥。正确逻辑应该是:用Bitbucket侧的私钥(自己生成或Bitbucket生成的)连接EC2,而不是反过来用EC2的私钥。

解决步骤

步骤1:修正私钥格式

  1. 打开Bitbucket仓库的Settings → Repository variables,找到SERVER_PRIVATE_KEY变量
  2. 确保变量值是完整的SSH私钥:
    • 必须包含开头和结尾的标识行
    • 中间的每一行私钥内容完整保留,不能丢失换行
    • 私钥前后无多余空格或空行

步骤2:调整密钥使用逻辑(若之前混淆了密钥对)

如果之前错误使用了EC2的私钥,改成以下流程:

  1. 在Bitbucket仓库的Settings → SSH keys中生成或添加一对SSH密钥(也可以用本地生成的密钥对)
  2. 将该密钥对的公钥添加到EC2服务器的/home/ubuntu/.ssh/authorized_keys文件中
  3. 在Bitbucket的Repository variables里,把该密钥对的私钥赋值给SERVER_PRIVATE_KEY变量

步骤3:修正命令路径

错误日志中的命令用了cd /utags-test/server,但scp配置的远程路径是/home/ubuntu/utags-test/server,路径不一致会导致后续docker命令执行失败,建议把SSH命令里的路径改成cd /home/ubuntu/utags-test/server,保持和部署路径一致。

步骤4:重新触发Pipeline

修改完成后,重新运行dev分支的Pipeline,验证是否能正常连接EC2并完成部署。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:00:59