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

Bitbucket Pipeline SSH密钥配置问题:无法获取主机指纹

解决Bitbucket Pipeline SCP部署主机密钥验证失败问题

核心问题定位

  1. 主机指纹获取的执行位置:Bitbucket网页端的"获取主机指纹"操作是在你的本地笔记本执行的,不是自托管Runner或Bitbucket官方服务器。如果你的笔记本不在设备所在局域网,就无法访问设备IP,自然获取不到指纹。
  2. Pipeline连接失败原因:自托管Runner的Docker容器默认网络可能无法访问局域网设备,或者Pipeline环境中没有预存设备的主机密钥,导致SSH/SCP时触发主机密钥验证失败。

解决步骤

1. 在Runner主机上获取设备主机密钥

因为你的Runner所在Linux机器能正常SSH连接设备,直接在这台机器上执行:

ssh-keyscan -H <你的嵌入式设备IP>

复制输出的完整内容(类似|1|xxx...|xxx ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBB...)。

2. 在Pipeline中配置已知主机

有两种方式:

  • 方式一:仓库设置中配置
    进入Bitbucket仓库的「Settings」→「Pipelines」→「SSH keys」,将刚才复制的主机密钥粘贴到「Known hosts」输入框,保存。
  • 方式二:在bitbucket-pipelines.yml中写入
    在部署步骤中手动生成known_hosts文件:
    pipelines:
      default:
        - step:
            name: 部署到嵌入式设备
            script:
              # 创建.ssh目录并设置权限
              - mkdir -p ~/.ssh
              - chmod 700 ~/.ssh
              # 添加设备主机密钥到已知主机
              - echo "|1|xxx...|xxx ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBB..." >> ~/.ssh/known_hosts
              - chmod 600 ~/.ssh/known_hosts
              # 执行SCP部署
              - scp -r ./dist/* <设备用户名>@<设备IP>:/目标路径/
    

3. 确保Runner容器能访问设备IP

Docker容器默认用桥接网络,可能无法直接访问局域网设备。修改自托管Runner的配置文件(通常在~/.bitbucket-runner/runner.properties),添加或修改:

docker.network_mode=host

重启Runner服务,让容器使用主机网络,这样就能和主机一样访问局域网设备。

4. 验证SSH密钥配置

  • 如果用仓库生成的SSH密钥:确认公钥已正确添加到设备的~/.ssh/authorized_keys,且文件权限为600,.ssh目录权限为700。
  • 如果用手动生成的密钥:将私钥添加到仓库的「SSH keys」中(选择「Add key」,粘贴私钥内容),确保Pipeline能加载到正确的私钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:32:51