当前位置: 首页 > 知识库问答 >
问题:

带有privateKeyFile的Apache Camel SFTP使用者提供错误ssh_msg_disconnect:2协议错误:找不到匹配的DH grp

施令秋
2023-03-14

无法使用带有私钥的Apache Camel访问SFTP位置。

SFTP URI:SFTP://user@host:22/usr/users/me/inbox/myfolder/?privatekeyfile=ssk-key.pem

错误:

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot connect to sftp://user@host:22
                at org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:146)
                at org.apache.camel.component.file.remote.RemoteFileConsumer.connectIfNecessary(RemoteFileConsumer.java:203)
                at org.apache.camel.component.file.remote.SftpConsumer.doStart(SftpConsumer.java:52)
                at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
                at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:3269)
                at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRouteConsumers(DefaultCamelContext.java:3563)
                at org.apache.camel.impl.DefaultCamelContext.doStartRouteConsumers(DefaultCamelContext.java:3499)
                at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3429)
                at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3197)
                at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3053)
                at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:175)
                at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2848)
                at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2844)
                at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2867)
                at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2844)
                at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
                at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2813)
                at org.apache.camel.main.Main.doStart(Main.java:127)
                at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
                at org.apache.camel.main.MainSupport.run(MainSupport.java:138)
                at org.apache.camel.main.MainSupport.run(MainSupport.java:390)
                at com.me.mypackage.MainApp.main(MainApp.java:27)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:606)
                at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: com.jcraft.jsch.JSchException: SSH_MSG_DISCONNECT: 2 Protocol error: no matching DH grp found 
                at com.jcraft.jsch.Session.read(Session.java:996)
                at com.jcraft.jsch.Session.connect(Session.java:323)
                at org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:118)
                ... 26 more

共有1个答案

王声
2023-03-14

编辑:在尝试下面的操作之前,首先检查您正在运行的Java版本。如果是版本7或更早的版本,尝试升级到JRE8,看看问题是否仍然存在。自从回答这个问题后,我遇到过这样的情况:它拒绝与Java7一起工作,但与8一起工作得很好。它可能与某些默认的安全提供程序设置有关。

查看堆栈跟踪的结尾,Camel正在使用JSch库来支持FTP over SSH。了解这一点对于进一步的故障排除非常有用,因为您可以查找JSCH支持哪些密钥交换算法。

当客户机试图与服务器建立安全连接时,将交换支持的算法列表,以确定客户机和服务器都支持哪些算法。然后为密钥交换选择算法。

kex->dh = PRIVSEP(choose_dh(min, nbits, max));
if (kex->dh == NULL) {
    sshpkt_disconnect(ssh, "no matching DH grp found");
    r = SSH_ERR_ALLOC_FAIL;
    goto out;
}
  • 组1:768位
  • 组2:1024位
  • 组5:1536位
  • 组14:2048位

在上面的C代码中,您注意到DH组被搜索的是最小位数、首选位数(nbits)和最大位数。这些数字由客户机(Camel中的JSch)提供,以指示它支持什么。服务器然后寻找最佳组。如果找不到符合这些条件的任何条件,则断开与消息没有找到匹配的DH grp的连接。

您可以在以下IETF备忘录中找到一些信息:https://tools.IETF.org/html/RFC4419。相关的一点:

>

  • c向S发送“min n max”,指示可接受的最小组大小、组的首选大小以及客户端将接受的最大组大小(以比特为单位)。

    S找到一个与客户机请求最匹配的组,并将“P G”发送给C。

    C是客户机,S是服务器。

    那么,怎么办呢?首先,检查与私钥对应的公钥的长度。然后向管理SFTP服务器的人请求有关支持的密码算法、密钥交换算法和DH组的信息。服务器可能只支持最小密钥比您正在使用的密钥长度大的组。或者反过来:客户端的公钥比服务器支持的最大值长。

    尝试找出您的Camel版本使用的JSch版本。如果可以更新Camel,并且更新的版本包含了更新的JSch版本,请先尝试一下。如果您不能更新或者已经使用了Camel的最新版本,请查看包含了哪个JSch版本,以及是否可以在不损坏东西的情况下用新的版本替换它。最新的JSch版本可能支持旧版本所不支持的东西,并且由于安全漏洞而对某些算法和密钥长度进行了更新和废弃,有时旧版本的客户端拒绝与最新的服务器一起工作(或者相反)。

    还要了解如何在JSch中启用日志记录(它似乎不使用Log4j或java.util.logging之类的默认框架),并尝试将系统属性javax.net.debug设置为值all(例如,通过命令行参数-djavax.net.debug=all)。它可能会提供额外的信息。

    祝你好运.我希望能够提供一个特定的解决方案,但此类问题通常需要SFTP服务器管理员和用户之间的通信来解决,因为它涉及到了解双方的配置。

  •  类似资料:
    • 问题内容: 正则表达式后给我错误 请求字符串在哪里 任何帮助,将不胜感激。 问题答案: 尚未尝试匹配。先致电再致电。 输出:

    • 我们有两个web服务(REST SOAP)在Apache Camel 2.13.0中运行,它基于CXF 2.7.10版,一直使用SSL和基本身份验证,运行得非常好。 由于Camel的版本升级到2.14.0版(内部使用现在的CXF 3.0.1),我们的服务现在停止工作,因为端口x的——但在版本更新期间,配置未被更改。 因此,我创建了一个新的eclipse项目,它将事情简化到最低限度(只是一个简单的S

    • 我正在尝试使用maven protoc插件和我在Cygwin中构建的protoc可执行文件编译协议缓冲区代码。我无法从Cygwin或Windows命令行执行此操作。下面是我在Windows中运行它时得到的输出,但从Cygwin运行时的错误是相同的。我觉得这很奇怪,因为如果问题是路径转换,那么我希望其中一个可以工作。这个可执行文件是用Cygwin的g构建的,这可能会影响到事情吗?(显而易见,该目录确

    • 问题内容: 我正在尝试在html页面中显示配置的值和角值服务中的版本代码,但显示的不是作者的名字,这是html代码 这是指令… 这是在其中配置和值的服务部分 我在开发人员控制台中遇到的错误是 问题答案: 确保将这些模块( myApp.services 和 myApp.directives )作为主要应用程序模块的依赖项加载,如下所示: 塞子: http ://plnkr.co/edit/wxuFx

    • 我正在尝试使用boto3从DynamoDB查询项目。 该表如下所示: DynamoDB表 我运行的代码是: 我错过了什么?

    • 我正在得到。在下面的命令中找不到proto File错误 输出:以下错误是protoc失败。 Edit1:下面是test1.proto文件。这里第7行有validator.proto导入