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

Bitbucket Pipeline通过SCP部署时SSH主机密钥验证失败求助

解决Bitbucket Pipelines部署React应用时SCP的Host key verification failed问题

问题背景

首次尝试通过Bitbucket Pipelines将React.js应用构建部署到SSH端口为9500的服务器,已在仓库Pipelines设置中配置密钥对和已知主机,本地Windows环境下密钥对可无密码SSH登录,但Pipelines中SCP上传始终报错Host key verification failed。即使手动在脚本中添加ssh-keyscan写入known_hosts,执行cat ~/.ssh/known_hosts能看到目标主机条目,问题依然存在。

核心排查方向

  1. 已知主机条目格式错误:非默认22端口的SSH主机,known_hosts必须使用[主机名]:端口的格式,否则Bitbucket Pipelines无法匹配主机密钥。
  2. 手动脚本配置干扰默认机制:Bitbucket Pipelines会自动加载你在设置中配置的SSH私钥和已知主机,手动创建~/.ssh目录、写入密钥的操作可能覆盖或破坏默认配置。
  3. SCP未指定正确私钥:默认情况下SCP可能不会自动使用Bitbucket配置的私钥,需要显式指定。

解决方案

1. 修正Bitbucket已知主机格式

登录Bitbucket仓库,进入Settings > Pipelines > SSH keys,在Known hosts区域:

  • 删除现有错误格式的主机条目
  • 在本地Windows终端执行ssh-keyscan -p 9500 myserver.com,复制输出的完整条目(格式为[myserver.com]:9500 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...)
  • 将复制的条目粘贴到Bitbucket的Known hosts中并保存

2. 简化Pipelines脚本

移除所有手动操作SSH配置的冗余代码,利用Bitbucket的自动加载机制,同时显式指定私钥路径确保SCP使用正确密钥:

image: node:16

pipelines:
  default:
    - step:
        name: Build and Deploy
        caches:
          - node
        script:
          - npm install
          - npm run build
          # 显式指定私钥路径和端口
          - scp -P 9500 -i ~/.ssh/id_rsa -r ./build/* myusername@myserver.com:/home/myusername/songs/songstest

3. 启用调试日志定位问题

如果问题仍存在,在脚本中添加SSH/SCP的调试参数,查看详细连接日志:

script:
  # ... 构建步骤
  # 测试SSH连接并输出详细日志
  - ssh -v -p 9500 myusername@myserver.com "echo 'SSH Test Passed'"
  # 或调试SCP上传
  - scp -v -P 9500 -i ~/.ssh/id_rsa ./build/* myusername@myserver.com:/home/myusername/songs/songstest

通过-v参数的输出,可以明确看到是主机密钥不匹配、密钥认证失败还是其他权限问题。

4. 服务器端配置检查

  • 确认服务器/etc/ssh/sshd_config中开启了PubkeyAuthentication yes
  • 检查服务器上/home/myusername/.ssh/authorized_keys文件,确保已添加与Bitbucket私钥配对的公钥
  • 确认服务器防火墙允许9500端口的SSH连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:03:19