Bitbucket Pipeline SSH密钥配置问题:无法获取主机指纹
解决Bitbucket Pipeline SCP部署主机密钥验证失败问题
核心问题定位
- 主机指纹获取的执行位置:Bitbucket网页端的"获取主机指纹"操作是在你的本地笔记本执行的,不是自托管Runner或Bitbucket官方服务器。如果你的笔记本不在设备所在局域网,就无法访问设备IP,自然获取不到指纹。
- 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
相关产品推荐
相关产品推荐

