Apache camel 驼峰SFTP连接jcraft jsch异常

Apache camel 驼峰SFTP连接jcraft jsch异常,apache-camel,jsch,camel-ftp,Apache Camel,Jsch,Camel Ftp,我使用的是camel版本2.13.1和camel ftp版本2.13.1。我正在尝试通过驼峰路由连接到sftp服务器。我得到一些与jCraft Jsch异常相关的错误,如下所示 org.apache.camel.component.file.GenericFileOperationFailedException: Cannot connect to sftp://uname@serveraddress.com:22 at org.apache.camel.component.file.r

我使用的是camel版本2.13.1和camel ftp版本2.13.1。我正在尝试通过驼峰路由连接到sftp服务器。我得到一些与jCraft Jsch异常相关的错误,如下所示

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot connect to sftp://uname@serveraddress.com:22
    at org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:143)
    at org.apache.camel.component.file.remote.RemoteFileConsumer.connectIfNecessary(RemoteFileConsumer.java:154)
    at org.apache.camel.component.file.remote.RemoteFileConsumer.recoverableConnectIfNecessary(RemoteFileConsumer.java:145)
    at org.apache.camel.component.file.remote.RemoteFileConsumer.prePollCheck(RemoteFileConsumer.java:55)
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:106)
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187)
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:114)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: com.jcraft.jsch.JSchException: Algorithm negotiation fail
    at com.jcraft.jsch.Session.receive_kexinit(Session.java:582)
    at com.jcraft.jsch.Session.connect(Session.java:320)
    at org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:115)
    ... 14 more

从异常消息判断,客户端和SSH服务器之间似乎没有共享密钥交换KEX算法。您可以通过在尝试连接之前启用JSch登录来验证这一点:

JSch.setlogger新记录器{ @凌驾 公共布尔值isEnabledint i{ 返回true; } @凌驾 公共无效登录i,字符串{ System.out.printlString; } }; 这将分别输出服务器和客户端支持的KEX列表。例如:

kex:服务器:ecdh-sha2-nistp256、ecdh-sha2-nistp384、ecdh-sha2-nistp521、diffie-hellman-group-exchange-sha256、diffie-hellman-group-exchange-sha1、diffie-hellman-group14-sha1、diffie-hellman-group1-sha1

我希望您会看到服务器列出的KEX算法都不在客户机列表中。基于此,您可以在服务器上启用附加的KEX算法(前提是您有权访问该服务器),或者启用客户端应用程序。有关更多信息,请参见

如果无法更改服务器,可以通过以下两种方式之一添加对附加KEX算法的支持:

将JSch升级至最新版本0.1.52,以自动启用对sha256的支持。 如果您坚持使用0.1.51,可以通过编程启用sha256:

JSch外壳=新的JSch; 属性配置=新属性; config.putkex,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256; config.putStrictHostKeyChecking,否; 然后创建会话并使用以下设置配置:

会话=。。。 session.setConfigconfig; 更新:
在这种情况下,结果不是缺少算法,而是缺少密码。服务器只支持aes256 cbc密码,默认情况下Oracle的JVM不支持aes256 cbc密码。但是,它可以直接从下载。

从异常消息判断,客户端和SSH服务器之间似乎没有共享密钥交换KEX算法。您可以通过在尝试连接之前启用JSch登录来验证这一点:

JSch.setlogger新记录器{ @凌驾 公共布尔值isEnabledint i{ 返回true; } @凌驾 公共无效登录i,字符串{ System.out.printlString; } }; 这将分别输出服务器和客户端支持的KEX列表。例如:

kex:服务器:ecdh-sha2-nistp256、ecdh-sha2-nistp384、ecdh-sha2-nistp521、diffie-hellman-group-exchange-sha256、diffie-hellman-group-exchange-sha1、diffie-hellman-group14-sha1、diffie-hellman-group1-sha1

我希望您会看到服务器列出的KEX算法都不在客户机列表中。基于此,您可以在服务器上启用附加的KEX算法(前提是您有权访问该服务器),或者启用客户端应用程序。有关更多信息,请参见

如果无法更改服务器,可以通过以下两种方式之一添加对附加KEX算法的支持:

将JSch升级至最新版本0.1.52,以自动启用对sha256的支持。 如果您坚持使用0.1.51,可以通过编程启用sha256:

JSch外壳=新的JSch; 属性配置=新属性; config.putkex,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256; config.putStrictHostKeyChecking,否; 然后创建会话并使用以下设置配置:

会话=。。。 session.setConfigconfig; 更新:
在这种情况下,结果不是缺少算法,而是缺少密码。服务器只支持aes256 cbc密码,默认情况下Oracle的JVM不支持aes256 cbc密码。但是,它可以直接从下载。

使用最新的apache camel版本,如'1.21.5'或最新的

使用最新的apache camel版本,如'1.21.5'或最新的

,这是客户端的sftp服务器。我不能改变。我能做什么?更新我的答案以包括客户端更改。我已经更新了JSch版本,但没有改进,同样的问题。你能发布列出KEX算法的日志输出吗?KEX:client:diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521。kex:客户端:ssh rsa、ssh dss、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384、ecdsa-sha2-nistp521……。这是客户端的sftp服务器。我不能改变。我能从我这方面做些什么。?更新了我的答案以包括客户端更改。我已经更新了JSch版本,但没有改进,同样的问题。你能发布列出KEX算法的日志输出吗?k 例如:客户:diffie-hellman-group1-sha1、diffie-hellman-group-exchange-sha1、diffie-hellman-group-exchange-sha256、ecdh-sha2-nistp256、ecdh-sha2-nistp384、ecdh-sha2-nistp521。kex:客户端:ssh rsa、ssh dss、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384、ecdsa-sha2-nistp521。。。。。。。