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

Camel SFTP连接jcraft jsch异常

华哲茂
2023-03-14

我使用的是camel version2.13.1和camel-ftp version2.13.1。我正试图通过camel路由连接到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

共有1个答案

巫马玉堂
2023-03-14

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

JSch.setLogger(new Logger() {
    @Override
    public boolean isEnabled(int i) {
        return true;
    }
    @Override
    public void log(int i, String string) {
        System.out.println(string);
    }
};

这将分别输出服务器和客户端支持的KEX列表。例如:

KEX:服务器:ecdh-sha2-nistp256、ecdh-sha2-nistp384、ecdh-sha2-nistp521、diffie-hellman-group-exchange-sha256、diffie-hellman-group-exchange-sha1、Diffie-Hellman-Group-14-SHA1、diffie-hellman-group1-sha1

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

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

>

  • 将JSch升级到最新版本(0.1.52),以自动启用对SHA256的支持。
  • 如果使用0.1.51,可以通过编程启用SHA256:

    JSch shell = new JSch();
    Properties config = new Properties();
    config.put("kex", "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256");
    config.put("StrictHostKeyChecking", "no");
    
    Session session = ...
    session.setConfig(config);
    

  •  类似资料:
    • 代码片段如下所示: 如果有人有决议,请帮忙?

    • 以下错误在连接 sqlserver(java) 时抛出。我不知道这个问题的根本原因。 如果有人遇到这个问题,请让我们知道,如何解决这个问题?

    • 这是我第一次使用RMI,基本上我设法在我的PC本地运行下面的RMI示例,但不是通过两个独立的Linux机器。 服务器界面: 服务器: 客户: 客户端接口与服务器接口相同 这是我为了运行rmi示例所做的: 1) 在服务器端,我创建了存根 2) 跑马场 3)运行服务器 4)我将存根从服务器端复制到客户端到同一个包中 5) 运行客户端 运行客户端后,我收到以下错误消息: 线程“main”java中出现异

    • 我有以下配置 java版本 OpenJDK版本"1.8.0_40-内部" OpenJDK运行时环境(build 1.8.0_40-internal-b27) OpenJDK 64位服务器虚拟机(构建25.40-b25,混合模式) ubuntu 14.04 clj网络驱动程序 我在做测试 并获得以下异常:

    • 一些背景: 我有一个使用3G或4G数据连接的Android应用程序。但它也连接到一个wifi热点,以便在热点设备和应用程序之间传输一些数据。 我想做的是:创建一个到这个wifi热点的套接字连接,并通过这个套接字发送/接收数据。 我添加了以下代码,以确保我们在创建套接字时使用wifi热点wifi(否则它有时最终会使用数据连接): 这似乎没问题。但是,我在尝试连接到远程服务器地址时发现问题。下面是我正

    • 问题内容: 大家好,我的课程在上面 我是jdbc的新手 请帮助我,我遇到运行时错误, java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 感谢您的任何建议 注意:我不知道如何将jar文件放入我的类路径并动态绑定它:S 问题答案: 您需要下载MySQL Connector / J 并将.jar文件添加到您的应用程序中 将jar文件添加到中(如

    • 我只是使用 Jmeter 和 MySQL 设置一个 JDBC 连接。我下载了jar文件并将相同的文件放在Jmeter的Lib文件夹中。之后,我创建了一个 JDBC 连接配置和 JDBC 请求。我还添加了一个查看结果树侦听器。 当我运行请求时收到以下错误:“无法创建池连接工厂(服务器时区值'EDT'无法识别或代表多个时区。如果要利用时区支持,则必须将服务器或 JDBC 驱动程序(通过服务器时区配置属

    • 我正在使用Spring 5网络流量、SpringBoot 2和Reactive MongoDB构建一个POC。在使用maven插件构建项目时,我得到了如下错误MongoDB连接错误:- 以下是我的申请表。属性文件:- 波姆。xml:- 请告知这里可能存在什么问题?我是否需要在我的机器上显式安装MongoDB并在运行此项目之前运行它。我相信MongoDB实例将自行运行,因为SpringBoot将在运