Bitbucket Pipeline配置SSH远程登录报Host key verification failed如何解决
Bitbucket Pipeline SSH连接失败解决方案
报错根因
ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory:SSH客户端未匹配到有效私钥,试图触发交互密码输入,但流水线为非交互环境无对应工具触发报错Host key verification failed:本地已知主机记录与远程服务器实际SSH公钥不匹配
具体修复步骤
优先使用Bitbucket官方原生密钥配置方案(即你尝试的方案二),无需手动处理私钥和known_hosts,避免人为配置错误:
- 确认仓库「Known hosts」栏填写的地址包含端口(如果SSH端口非默认22,格式为
[IP]:端口,比如[192.168.1.1]:2222),再点击fetch拉取公钥 - 确认远程服务器
~/.ssh目录权限为700,~/.ssh/authorized_keys权限为600,且目录属主为登录用户 - 检查远程服务器
/etc/ssh/sshd_config配置:确认PubkeyAuthentication yes未被注释,若使用RSA密钥,确认PubkeyAcceptedKeyTypes包含ssh-rsa,也可直接生成兼容性更好的ed25519密钥:ssh-keygen -t ed25519
- 确认仓库「Known hosts」栏填写的地址包含端口(如果SSH端口非默认22,格式为
若坚持使用自定义私钥方案(即你尝试的方案一),需修正以下配置:
- 私钥base64编码时使用
base64 -w 0 id_rsa > id_rsa_base64.txt参数,避免编码结果携带换行符导致解码后私钥无效 - 生成known_hosts时指定SSH端口:
ssh-keyscan -t rsa -p <你的SSH端口> 服务器IP > my_known_hosts - 流水线脚本中补充文件权限配置,同时给SSH命令增加参数禁用密码交互,指定私钥路径
- 私钥base64编码时使用
修正后的流水线配置示例
原生配置方案(推荐)
image: atlassian/default-image:latest pipelines: default: - step: name: Deploy to staging deployment: staging script: - echo "Deploying to staging environment" # Bitbucket自动注入已配置的私钥和known_hosts,无需手动处理 - ssh $USER@$SERVER -p $PORT 'echo "connected to remote host as $USER"'
自定义私钥方案
image: atlassian/default-image:latest pipelines: default: - step: name: Deploy to staging deployment: staging script: - echo "Deploying to staging environment" - mkdir -p ~/.ssh - cat ./my_known_hosts >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - (umask 077 ; echo $SSH_KEY | base64 --decode > ~/.ssh/id_rsa) - chmod 600 ~/.ssh/id_rsa # 增加参数指定私钥、禁用密码认证,也可加-v参数输出详细日志排查问题 - ssh -i ~/.ssh/id_rsa -o PasswordAuthentication=no $USER@$SERVER -p $PORT 'echo "connected to remote host as $USER"'
排查技巧
若仍报错,可在ssh命令后加-v参数输出详细连接日志,定位具体是私钥校验失败还是主机密钥校验失败。
内容的提问来源于stack exchange,提问作者Manuel Bosi
相关产品推荐
相关产品推荐

