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

Bitbucket CI/CD流水线SSH连接失败:身份文件路径异常及权限问题求助

解决Bitbucket CI/CD SSH连接失败问题

核心问题拆解

你碰到的几个错误其实指向两个关键问题:

  1. CI容器与本地文件系统完全隔离:Bitbucket Pipelines运行在独立的Docker容器中,你本地机器的~/home/kiran/.ssh/authorized_keys并不会自动同步到容器里,这就是为什么系统提示“文件不存在”。
  2. 非交互式环境的SSH适配问题:CI环境没有终端,SSH默认会尝试分配伪终端,导致警告;同时SSH对密钥文件的权限要求极严格,权限不符合也会触发“权限拒绝”。

分步解决方案

1. 把SSH私钥存入Bitbucket安全变量

首先要明确:authorized_keys是放在目标服务器(35.194.42.142)上的公钥集合,你在CI里需要用的是本地对应的私钥(比如id_rsa)。把私钥添加到项目安全变量:

  • 打开Bitbucket项目,进入Settings > Pipelines > Repository variables
  • 新建变量,命名为SSH_PRIVATE_KEY,值粘贴你的私钥完整内容(不要多余空格或换行)
  • 勾选Secured选项,确保密钥不泄露

2. 修改CI脚本配置SSH环境

更新你的bitbucket-pipelines.yml,先在容器里搭建好SSH所需的环境:

image: node:8.14.0
pipelines:
  default:
    - step:
        script:
          - echo "Connect to server"
          # 创建.ssh目录并设置合规权限
          - mkdir -p ~/.ssh
          # 将安全变量中的私钥写入容器内的密钥文件
          - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
          # SSH要求私钥权限必须是600,否则会拒绝使用
          - chmod 600 ~/.ssh/id_rsa
          # 添加目标服务器的SSH指纹到known_hosts,避免首次连接的确认弹窗
          - ssh-keyscan 35.194.42.142 >> ~/.ssh/known_hosts
          # 添加-T参数禁用伪终端分配,解决“伪终端将不会分配”警告
          - ssh -T kiran@35.194.42.142
          # 执行文件传输命令
          - scp -r README.md kiran@35.194.42.142:/home/kiran/temp

3. 关键细节确认

  • 目标服务器的/home/kiran/.ssh/authorized_keys里,必须包含你私钥对应的公钥,否则无法通过身份验证。
  • 目标服务器的~/.ssh目录权限要设为700,authorized_keys文件权限设为600,这是SSH的强制要求。
  • 如果还是权限拒绝,可以在SSH命令后加-v参数(比如ssh -v -T kiran@35.194.42.142),开启 verbose 模式查看详细日志,定位具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:37:17