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

迁移至Ubuntu22.04 Droplet后Bitbucket Pipeline公钥权限拒绝问题

Bitbucket Pipeline 部署至Ubuntu 22.04 Droplet 权限拒绝及版本问题解决

问题背景

从Ubuntu 18.04 Droplet迁移至DigitalOcean的Ubuntu 22.04 LTS Droplet,原Bitbucket Pipeline配置可正常运行,当前配置如下:

image: atlassian/default-image:latest

pipelines:
  branches:
    master:
      - step:
          name: Deploy to dev
          script:
            - echo "Deploying to dev..."
            - ssh $SSH_USER@$SSH_HOST "
              cd $PROJECT_PATH &&
              git pull origin master --rebase &&
              composer install &&
              php artisan migrate &&
              php artisan config:cache &&
              php artisan view:clear
              "

已完成以下操作但仍报错:

  • 更换仓库SSH密钥对(本地可正常登录Droplet的id_rsa/id_rsa.pub)
  • 更新指纹及仓库变量
  • 尝试使用Bitbucket生成的密钥并添加至dev用户的authorized_keys
  • 检查.ssh目录及authorized_keys的权限、所有权,未发现异常

执行Pipeline时的错误信息:

ssh $SSH_USER@$SSH_HOST " cd $PROJECT_PATH && git pull origin master --rebase && composer install && php artisan migrate && php artisan config:cache && php artisan view:clear "

Permission denied (publickey).

N/A: version "v23" is not yet installed

一、SSH权限拒绝问题排查与解决

  1. 验证Pipeline环境的密钥加载状态
    在Pipeline脚本中添加调试命令,确认密钥是否被正确识别:

    - step:
        script:
          - echo "Checking SSH key status..."
          - ls -la ~/.ssh/
          - ssh -v $SSH_USER@$SSH_HOST "echo Connection test passed"
    

    通过输出日志查看密钥加载流程,确认是否使用了目标私钥。

  2. 检查Droplet的SSH服务配置
    登录Droplet,编辑/etc/ssh/sshd_config,确保以下配置正确:

    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
    PasswordAuthentication no # 开启密码登录可能干扰密钥认证,建议关闭
    

    修改后重启SSH服务:sudo systemctl restart sshd

  3. 严格校准文件权限
    SSH对权限要求苛刻,必须确保Droplet上的目录和文件权限符合规范:

    • 设置.ssh目录权限:chmod 700 ~/.ssh
    • 设置authorized_keys权限:chmod 600 ~/.ssh/authorized_keys
    • 修正所有权:chown -R $USER:$USER ~/.ssh
  4. 使用Bitbucket内置密钥管理
    放弃手动上传本地密钥,改用Bitbucket生成的密钥对:

    • 进入仓库设置 > Pipelines > SSH keys
    • 点击Generate keys生成新密钥对
    • 将公钥复制到Droplet的~/.ssh/authorized_keys中
    • 确认仓库变量SSH_HOST(Droplet IP/域名)和SSH_USER配置正确

二、Composer版本问题解决

错误提示version "v23" is not yet installed是因为Ubuntu 22.04默认Composer版本与项目要求不匹配,解决方法:

  1. 在Droplet上更新Composer到稳定版
    登录Droplet执行:

    sudo composer self-update
    

    若更新失败,直接重新安装最新版:

    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"
    sudo mv composer.phar /usr/local/bin/composer
    
  2. Pipeline中指定Composer版本(可选)
    若项目需要特定版本的Composer,可在Pipeline脚本中添加:

    - composer self-update --2.2 # 根据项目需求调整版本号
    

三、Pipeline脚本优化(可选)

拆分远程命令、启用ssh-agent管理密钥,提升稳定性和调试性:

image: atlassian/default-image:latest

pipelines:
  branches:
    master:
      - step:
          name: Deploy to dev
          script:
            - echo "Deploying to dev..."
            # 启动ssh-agent并加载私钥
            - eval $(ssh-agent -s)
            - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
            # 禁用主机密钥检查(仅用于可信主机)
            - mkdir -p ~/.ssh
            - echo "StrictHostKeyChecking no" >> ~/.ssh/config
            # 分步执行远程命令
            - ssh $SSH_USER@$SSH_HOST "cd $PROJECT_PATH && git pull origin master --rebase"
            - ssh $SSH_USER@$SSH_HOST "cd $PROJECT_PATH && composer install --no-dev --optimize-autoloader"
            - ssh $SSH_USER@$SSH_HOST "cd $PROJECT_PATH && php artisan migrate --force"
            - ssh $SSH_USER@$SSH_HOST "cd $PROJECT_PATH && php artisan config:cache"
            - ssh $SSH_USER@$SSH_HOST "cd $PROJECT_PATH && php artisan view:clear"

注意:SSH_PRIVATE_KEY需作为仓库安全变量添加,值为私钥完整内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:05:15