BitBucket Pipeline与DO云服务器SSH-1密钥弃用问题求助
问题解决:Ubuntu 24.04下Bitbucket Pipelines合规密钥部署方案
错误原因拆解
- ssh-rsa签名被拒绝:Ubuntu 24.04 LTS默认禁用了基于SHA-1的
ssh-rsa签名算法,Bitbucket自动生成的RSA密钥或旧版PuTTYgen生成的RSA密钥默认使用该算法,因此被服务器拒绝,对应日志userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms。 - ssh_askpass错误:Bitbucket Pipelines是自动化非交互式环境,即使密钥无密码,若ssh命令未明确禁用交互模式,仍会尝试调用密码弹窗工具导致报错。
正确合规解决方案
1. 生成安全的ED25519密钥对
ED25519是当前推荐的高安全密钥算法,完全规避SHA-1风险:
- 用PuTTYgen生成:
- 打开PuTTYgen v0.82,密钥类型选择「Ed25519」
- 点击「Generate」,移动鼠标生成密钥,不要设置密码短语(自动化环境无需交互验证)
- 复制以
ssh-ed25519开头的完整公钥内容;私钥需转换为OpenSSH格式:Conversions > Export OpenSSH key,保存为无密码文件后复制内容
- 用OpenSSH命令生成(本地有OpenSSH环境时):
生成的公钥在ssh-keygen -t ed25519 -C "bitbucket-pipelines-deploy" -N ""~/.ssh/id_ed25519.pub,私钥在~/.ssh/id_ed25519
2. 配置服务器公钥
- 复制生成的公钥内容,通过Forge上传到DigitalOcean服务器的目标用户名下,确保公钥被正确写入
~/.ssh/authorized_keys文件 - 检查权限:
~/.ssh目录权限设为700,authorized_keys文件权限设为600(权限过宽会导致ssh认证失败)
3. 配置Bitbucket Pipelines
- 进入仓库「Settings > Pipelines > SSH keys」
- 点击「Add key」,粘贴转换后的OpenSSH格式私钥内容
- 点击「Fetch」获取DigitalOcean服务器的已知主机指纹,避免ssh连接时的手动验证步骤
4. 调整部署脚本参数
在bitbucket-pipelines.yml的部署步骤中,给rsync的ssh命令添加非交互参数,彻底避免ssh-askpass错误:
script: - rsync -avz --delete --exclude='.git' ./dist/ your-user@your-do-ip:/deploy/path/ -e "ssh -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
BatchMode=yes:强制ssh使用密钥认证,禁用任何交互式请求StrictHostKeyChecking=accept-new:自动接受新的主机指纹(已配置已知主机后也可设为no,但accept-new更安全)
5. 恢复服务器默认安全配置
- 编辑
/etc/ssh/sshd_config,移除之前添加的PubkeyAcceptedAlgorithms +ssh-rsa,保留默认安全配置:PubkeyAuthentication yes - 重启sshd服务:
sudo systemctl restart sshd
验证
触发Bitbucket Pipelines构建,查看部署日志,若成功同步,服务器/var/log/auth.log会出现类似如下的成功记录:
Accepted publickey for your-user from xxx.xxx.xxx.xxx port xxxxx ssh2: ED25519 SHA256:xxxxxxxxx
内容的提问来源于stack exchange,提问作者Kristjan O.
相关产品推荐
相关产品推荐

