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

Pentaho SSH连接Neo4j报IOException: Cannot negotiate, proposals do not match错误

问题根因
  • 核心错误Cannot negotiate, proposals do not match是SSH连接阶段的算法协商失败导致:PDI 8.3内置的trilead-ssh2 是多年前的老版本SSH客户端,仅支持老旧的密钥交换、加密、校验算法;而你使用的Neo4j镜像更新后,内置的OpenSSH服务默认禁用了这些存在安全漏洞的旧算法,两端没有共同支持的算法,因此密钥交换中断,连接被关闭。
  • 故障突发的原因:你开启了docker-compose的镜像自动拉取策略,或手动重建容器时拉取了最新版Neo4j镜像,新版本镜像的SSH配置做了安全收紧,移除了对旧SSH客户端算法的兼容。
解决方案

方案1:临时兼容修复(最快生效,适合测试环境)

修改Neo4j容器的SSH配置,放开对老算法的支持:

  1. 进入Neo4j容器,编辑/etc/ssh/sshd_config文件,末尾添加以下配置:
KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
Ciphers +aes128-cbc,3des-cbc
MACs +hmac-sha1
  1. 执行service sshd restart重启SSH服务
  2. 测试PDI到Neo4j的SFTP连接是否恢复
    如果需要避免每次重建容器都手动修改,可以把以上配置写入自定义Neo4j镜像的Dockerfile,或者通过docker-compose的configs功能直接挂载配置文件到对应路径。

方案2:升级PDI的SSH依赖(适合生产环境,无需修改Neo4j配置)

老版本trilead-ssh2库的算法支持不足,升级该依赖即可解决协商问题:

  1. 关闭PDI服务,删除PDI安装目录下lib/文件夹中原有的旧版trilead-ssh2-*.jar
  2. 放入适配JDK8、版本不低于build222的trilead-ssh2 jar包,该版本新增了对现代SSH算法的支持
  3. 重启PDI服务即可

方案3:替换传输方案(长期最优,推荐使用)

同docker-compose内网环境下不需要走SFTP传输文件,你可以直接通过共享卷实现文件传递:

  • 在docker-compose.yml中定义一个共享数据卷,同时挂载到PDI容器的CSV输出目录和Neo4j容器的import/目录
  • PDI生成的CSV压缩包直接写入共享卷,不需要经过网络传输,Neo4j可以直接读取处理,彻底避免SSH连接问题,同时传输性能更高。

内容的提问来源于stack exchange,提问作者Tomáš Záluský

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:57:03