Bitbucket CI/CD流水线SSH连接失败:身份文件路径异常及权限问题求助
解决Bitbucket CI/CD SSH连接失败问题
核心问题拆解
你碰到的几个错误其实指向两个关键问题:
- CI容器与本地文件系统完全隔离:Bitbucket Pipelines运行在独立的Docker容器中,你本地机器的
~/home/kiran/.ssh/authorized_keys并不会自动同步到容器里,这就是为什么系统提示“文件不存在”。 - 非交互式环境的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
相关产品推荐
相关产品推荐

