Camel SFTP-соединение jcraft jsch исключение

Я использую camel версии 2.13.1 и camel-ftp версии 2.13.1. Я пытаюсь подключиться к sftp-серверу через верблюжий маршрут. Я получаю некоторую ошибку, связанную с исключением jCraft Jsch, как показано ниже.

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot connect to sftp://[email protected]: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

person Dkr    schedule 04.05.2015    source источник


Ответы (2)


Судя по сообщению об исключении, похоже, что между клиентом и 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-group14-sha1, diffie-hellman-group1-sha1

Я ожидал, что вы увидите, что ни один из алгоритмов KEX, перечисленных сервером, не находится в списке клиентов. На основе этого вы можете либо включить дополнительные алгоритмы KEX на сервере (при условии, что у вас есть к нему доступ), либо в своем клиентском приложении. Для получения дополнительной информации также см. эту страницу .

Если вы не можете внести изменения в сервер, вы можете добавить поддержку дополнительных алгоритмов KEX одним из двух способов:

  1. Обновите JSch до последней версии (0.1.52), чтобы автоматически включить поддержку sha256.
  2. Если вы застряли с 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);

Обновление: в данном случае это оказался не отсутствующий алгоритм, а отсутствующий шифр. Сервер поддерживает только шифр aes256-cbc, который по умолчанию не поддерживается Oracle JVM. Однако его можно загрузить непосредственно с Oracle .

person Ben Damer    schedule 04.05.2015
comment
Это клиентский sftp-сервер. Я не могу измениться. Что я могу сделать с моей стороны? - person Dkr; 04.05.2015
comment
Обновил мой ответ, чтобы включить изменения на стороне клиента. - person Ben Damer; 04.05.2015
comment
Я обновил версию JSch, но без улучшений, та же проблема. - person Dkr; 04.05.2015
comment
Не могли бы вы опубликовать вывод журнала, в котором перечислены алгоритмы KEX? - person Ben Damer; 04.05.2015
comment
kex: клиент: 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 ....... - person Dkr; 05.05.2015
comment
Это результат для клиента (kex: client) - аналогичные записи в журнале должны быть для сервера (kex: server). Можете ли вы их опубликовать? На данный момент я подозреваю, что ваш единственный вариант - попросить вашего клиента включить дополнительные алгоритмы в конфигурации своего сервера. - person Ben Damer; 05.05.2015
comment
Строка удаленной версии: SSH-2.0-0 FIPS; Строка локальной версии: SSH-2.0-JSCH-0.1.52; Контрольные шифры: aes256-ctr, aes192-ctr, aes128-ctr, aes256-cbc, aes192-cbc, aes128-cbc, 3des-ctr, arcfour, arcfour128, arcfour256; CheckKexes: diffie-hellman-group14-sha1, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521; diffie-hellman-group14-sha1 недоступен .; CheckSignatures: ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521; kex: сервер: diffie-hellman-group1-sha1, diffie-hellman-group14-sha1; kex: сервер: ssh-dss, ssh-rsa; - person Dkr; 05.05.2015
comment
Присоединяйтесь к чату по этому вопросу, чтобы мы могли обсудить его дальше. - person Ben Damer; 05.05.2015

Используйте последнюю версию apache-camel, например '1.21.5' или latest

person Sin2    schedule 06.03.2019