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

Bitbucket Pipeline SSH连生产环境报read_passphrase: can't open /dev/tty错误

问题根因

你观察到的read_passphrase调用和私钥是否加密无关,该调用触发的原因是SSH客户端在非交互的流水线环境中,遇到了需要人工确认的验证逻辑,但无法打开终端输入,最终报错主机密钥验证失败。从日志对比来看,你虽然确认了SSH服务端配置一致,但忽略了Bitbucket Pipelines环境中存储的known_hosts条目、客户端传入的身份凭据的细微差异:

  1. 日志显示生产的RSA主机密钥匹配成功,但SSH客户端在完成主机密钥校验后,尝试身份验证时找不到可用的无密码私钥, fallback 到了键盘交互验证模式,才会触发read_passphrase调用
  2. 预发环境的身份验证第一步就匹配到了可用私钥,直接完成ssh_rsa_verify,不会进入密码询问流程
排查&解决步骤
  • 第一步:先确认SSH命令是否显式指定了私钥路径
    非交互环境下SSH默认搜索私钥的路径可能和你预期不一致,执行命令时强制指定私钥:
    ssh -v -i /path/to/your/id_rsa 用户名@$PRODUCTION_SERVER 你的命令
    
  • 第二步:校验生产服务器authorized_keys的内容和权限
    登录生产服务器检查对应登录用户的~/.ssh/authorized_keys文件:
    1. 确认你本地生成的公钥内容完整写入了该文件,没有多余的换行、空格
    2. 权限必须严格设置为600,对应.ssh文件夹权限设置为700,属主必须是登录用户本身
  • 第三步:调整SSH命令参数适配非交互环境
    流水线属于无终端的非交互环境,给SSH命令加上以下参数跳过不必要的交互逻辑:
    ssh -v -i /path/to/your/id_rsa -o StrictHostKeyChecking=accept-new -o BatchMode=yes 用户名@$PRODUCTION_SERVER 你的命令
    
    其中BatchMode=yes会完全禁用所有需要交互的询问逻辑,直接跳过密码询问环节,如果是身份凭据问题会直接输出明确的身份验证失败日志,方便你进一步排查
  • 第四步:校验Bitbucket Pipelines变量配置
    确认你存在Bitbucket仓库变量里的生产服务器私钥,和预发的配置规则完全一致:没有前后多余空格、变量作用域包含了你执行的流水线分支、变量没有标记为Secured之后误改了内容
额外验证方法

你可以直接在Bitbucket Pipelines的脚本步骤里加以下命令,直接对比预发和生产环境的SSH客户端上下文差异:

# 打印所有ssh相关文件的权限和内容
ls -la /root/.ssh/
cat /root/.ssh/known_hosts
cat /root/.ssh/id_rsa | head -5 # 只打印前几行确认私钥格式正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:07