如何通过cPanel生成的SSH密钥配置Bitbucket Pipeline对接cPanel服务器
Bitbucket Pipeline对接cPanel SSH部署配置方案
一、cPanel端前置配置
- 登录cPanel后台,进入「安全」分类下的「SSH访问」页面
- 点击「管理SSH密钥」,选择「生成新密钥」:
- 密钥名称建议设为
bitbucket_deploy,设置强密码(后续会用到) - 密钥类型选RSA,长度选2048或4096都可
- 密钥名称建议设为
- 生成后找到刚生成的公钥
bitbucket_deploy.pub,点击「管理授权」,确认已经设为已授权状态 - 回到密钥列表,下载私钥
bitbucket_deploy文件备用 - 确认你的cPanel账户对
/staging.example.net.au目录有读写执行权限,可在cPanel的「文件管理器」中右键目录查看权限,确保所属用户是你的cPanel账户,权限至少为755
二、Bitbucket端变量配置
进入你的Bitbucket仓库,依次打开「Repository settings」->「Repository variables」(建议设置为对应部署环境的专属变量,避免全局泄露),添加以下变量:
CPANEL_SSH_PRIVATE_KEY:值为你刚下载的私钥文件的全部内容,注意不要漏开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----CPANEL_SSH_PASSPHRASE:值为你生成密钥时设置的密码(如果生成时没设密码就不用加这个变量)CPANEL_USER:值为你的cPanel登录用户名,注意SSH默认会用当前容器的用户名连接cPanel,必须显式指定cPanel用户名才不会权限报错CPANEL_HOST:值为你的服务器域名example.net.auSTAGING_PATH:值为/staging.example.net.au
三、权限报错原因说明
你之前执行ssh example.net.au ls -l /staging.example.net.au报错的核心原因是没有指定cPanel用户名,SSH默认用容器内的root用户去连接服务器,cPanel默认禁止root用户SSH登录,同时root用户也没有你这个站点目录的访问权限。
四、修改后的bitbucket-pipelines.yml配置
image: atlassian/default-image:2 pipelines: default: - parallel: - step: name: 'Build and Test' script: - echo "Your build and test goes here..." - step: name: 'Lint' script: - echo "Your linting goes here..." - step: name: 'Security scan' script: - echo "Your security scan goes here..." - step: name: 'Deployment to Staging' deployment: staging script: # 写入SSH私钥到容器 - echo "$CPANEL_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa # 配置跳过主机密钥校验,避免交互提示 - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config # 测试连通性 - ssh $CPANEL_USER@$CPANEL_HOST ls -l $STAGING_PATH # 拉取代码、执行composer更新、数据库迁移 - ssh $CPANEL_USER@$CPANEL_HOST "cd $STAGING_PATH && git pull origin main" - ssh $CPANEL_USER@$CPANEL_HOST "cd $STAGING_PATH && composer install --no-dev --optimize-autoloader" - ssh $CPANEL_USER@$CPANEL_HOST "cd $STAGING_PATH && php bin/console doctrine:migrations:migrate --no-interaction" - step: name: 'Deployment to Production' deployment: production trigger: 'manual' script: - echo "Your deployment to production script goes here..."
注意:如果你的代码仓库不是main分支,自行替换git pull后的分支名,Symfony控制台路径如果不是bin/console也对应修改
内容的提问来源于stack exchange,提问作者Bradmage
相关产品推荐
相关产品推荐

