Мы используем Spring Batch Admin для разных заданий, подключающихся к разным удаленным SFTP-серверам. У нас есть два SBA, поэтому я фактически переместил эту работу из старой версии в новую.

Все рабочие места используют JSch в Jcraft, и я обновил эту версию с 0.1.42 до 0.1.54. Все задания, кроме этой последней, работают нормально, они подключаются без проблем.

В этой работе у меня тайм-аут соединения, и я не могу понять, почему.

Другая (большая) проблема заключается в том, что я не могу устранить эту проблему локально со своего компьютера, я даже не могу войти в эту удаленную учетную запись SFTP через WinSCP со своего компьютера, чтобы самостоятельно проверить соединение. Владельцы SFTP-сервера говорят, что они видят мои подключения в своем брандмауэре, но не за его пределами и не подключаются к своему SFTP. Единственные видят успешные соединения на своем SFTP-сервере, поэтому они не могут понять, почему я не могу подключиться, потому что мое соединение не работает.

Я добавил новые политики в свою Java, как в Java 8, так и в Java 7. Я все еще не могу выполнять свою работу. Я ищу здесь в StackOverflow и в Google, но не нашел решения. Я использую интеграцию Springframework sftp Session и DefaultSftpSessionFactory версии 2.0.3 как в новой, так и в старой работе. Мы используем Java 7 и Tomcat 8, и мы добавили "-Dhttps.protocols = TLSv1.1, TLSv1.2" в Tomcat

Это журнал нового задания с Jsch версии 0.1.54 при подключении к серверу SFTP.

com.jcraft.jsch (log:52)  - Connecting to XX.XXX.XX.XX port 22
com.jcraft.jsch (log:52)  - Connection established
com.jcraft.jsch (log:52)  - Remote version string: SSH-2.0-1.86 FRES
com.jcraft.jsch (log:52)  - Local version string: SSH-2.0-JSCH-0.1.54
com.jcraft.jsch (log:52)  - CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
com.jcraft.jsch (log:52)  - CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
com.jcraft.jsch (log:52)  - diffie-hellman-group14-sha1 is not available.
com.jcraft.jsch (log:52)  - CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
com.jcraft.jsch (log:52)  - SSH_MSG_KEXINIT sent
com.jcraft.jsch (log:52)  - SSH_MSG_KEXINIT received
com.jcraft.jsch (log:52)  - kex: server: diffie-hellman-group14-sha256,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
com.jcraft.jsch (log:52)  - kex: server: ssh-rsa
com.jcraft.jsch (log:52)  - kex: server: aes256-cbc,aes256-ctr,3des-cbc
com.jcraft.jsch (log:52)  - kex: server: aes256-cbc,aes256-ctr,3des-cbc
com.jcraft.jsch (log:52)  - kex: server: hmac-sha2-256,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96
com.jcraft.jsch (log:52)  - kex: server: hmac-sha2-256,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96
com.jcraft.jsch (log:52)  - kex: server: zlib,none
com.jcraft.jsch (log:52)  - kex: server: zlib,none
com.jcraft.jsch (log:52)  - kex: server: 
com.jcraft.jsch (log:52)  - kex: server: 
com.jcraft.jsch (log:52)  - kex: client: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
com.jcraft.jsch (log:52)  - kex: client: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
com.jcraft.jsch (log:52)  - kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-ctr,aes192-cbc,aes256-ctr,aes256-cbc
com.jcraft.jsch (log:52)  - kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-ctr,aes192-cbc,aes256-ctr,aes256-cbc
com.jcraft.jsch (log:52)  - kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96
com.jcraft.jsch (log:52)  - kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96
com.jcraft.jsch (log:52)  - kex: client: none
com.jcraft.jsch (log:52)  - kex: client: none
com.jcraft.jsch (log:52)  - kex: client: 
com.jcraft.jsch (log:52)  - kex: client: 
com.jcraft.jsch (log:52)  - kex: server->client 3des-cbc hmac-md5 none
com.jcraft.jsch (log:52)  - kex: client->server 3des-cbc hmac-md5 none
com.jcraft.jsch (log:52)  - SSH_MSG_KEX_DH_GEX_REQUEST(1024<1024<1024) sent
com.jcraft.jsch (log:52)  - expecting SSH_MSG_KEX_DH_GEX_GROUP
com.jcraft.jsch (log:52)  - Disconnecting from XX.XXX.XX.XX port 22

Журнал для старой версии задания с JSCH версии 0.1.42 при подключении к SFTP-серверу

com.jcraft.jsch (log:52)  - Connecting to XX.XXX.XX.XX port 22
com.jcraft.jsch (log:52)  - Connection established
com.jcraft.jsch (log:52)  - Remote version string: SSH-2.0-1.86 FRES
com.jcraft.jsch (log:52)  - Local version string: SSH-2.0-JSCH-0.1.42
com.jcraft.jsch (log:52)  - CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
com.jcraft.jsch (log:52)  - SSH_MSG_KEXINIT sent
com.jcraft.jsch (log:52)  - SSH_MSG_KEXINIT received
com.jcraft.jsch (log:52)  - kex: server->client 3des-cbc hmac-md5 none
com.jcraft.jsch (log:52)  - kex: client->server 3des-cbc hmac-md5 none
com.jcraft.jsch (log:52)  - SSH_MSG_KEXDH_INIT sent
com.jcraft.jsch (log:52)  - expecting SSH_MSG_KEXDH_REPLY
com.jcraft.jsch (log:52)  - ssh_rsa_verify: signature true
com.jcraft.jsch (log:52)  - Host 'XX.XXX.XX.XX' is known and mathces the RSA host key
com.jcraft.jsch (log:52)  - SSH_MSG_NEWKEYS sent
com.jcraft.jsch (log:52)  - SSH_MSG_NEWKEYS received
com.jcraft.jsch (log:52)  - SSH_MSG_SERVICE_REQUEST sent
com.jcraft.jsch (log:52)  - SSH_MSG_SERVICE_ACCEPT received
com.jcraft.jsch (log:52)  - Authentications that can continue: keyboard-interactive,password
com.jcraft.jsch (log:52)  - Next authentication method: keyboard-interactive
com.jcraft.jsch (log:52)  - Authentications that can continue: password
com.jcraft.jsch (log:52)  - Next authentication method: password
com.jcraft.jsch (log:52)  - Authentication succeeded (password).
job.FtpFileFetcher (downloadFile:62)  - Listing remote directory: .
job.FtpFileFetcher (downloadFile:64)  - Found 2 entries in: ., 
job.FtpFileFetcher (filterEntries:139)  - file: file_20190218221932.xml attributes: -rw-rw-rw- 0 0 3369 Mon Feb 18 22:19:33 CET 2019
job.FtpFileFetcher (filterEntries:139)  - file: file_20190219214922.xml attributes: -rw-rw-rw- 0 0 3369 Tue Feb 19 21:49:22 CET 2019
job.FtpFileFetcher (downloadFile:66)  - Found 2 files in: ., matching pattern: file.\d{14}.xml 
job.FtpFileFetcher (downloadFile:71)  - Fetching matching file file_20190219214922.xml to local directory K:/files
job.FtpFileFetcher (executeDownload:104)  - Downloading remote file ./file_20190219214922.xml to K:\files\file_20190219214922.xml
com.jcraft.jsch (log:52)  - Disconnecting from XX.XXX.XX.XX port 22

Я вижу разницу, но не понимаю, что не так, и надеюсь, что кто-то здесь может мне помочь. Если вам нужно что-то увидеть, спросите Спасибо.

0
user2018311 3 Апр 2019 в 17:57

1 ответ

Лучший ответ

Во-первых, https.protocols предназначен только для HTTPS, то есть HTTP через TLS. Jsch реализует SSH и SFTP, которые полностью отделены и не связаны с HTTPS, HTTP и TLS.

Ваша система предлагает DH_GEX (групповой обмен) с min = 1024 pref = 1024 max = 1024, потому что Java7 не поддерживает DH больше 1024 бит. Серверу это, вероятно, не нравится, потому что размер DH 1024 теперь считается небезопасным (с 2014 года, согласно NIST, другие значения несколько различаются). Если вы можете перейти на Java8 (или выше), это должно исправить это, или, если у вас есть OpenJDK или платная поддержка, OracleJDK 7u171 также работает в соответствии с примечаниями к выпуску (я не тестировал).

Ваш клиент не предлагает group14, даже если он настроен, предположительно по той же причине; см. строку diffie-hellman-group14-sha1 is not available. Однако сервер действительно предлагает группу group1, даже если она всего 1024-битная, возможно, для обратной совместимости; если вы не можете исправить свою Java, как указано выше, попробуйте настроить Kex для исключения (обоих) группового обмена и выхода из группы group1:

session.setConfig(conf);
// with a Properties that includes
conf.put("kex","ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1");
// or if you prefer just 
conf.put("kex","diffie-hellman-group1-sha1");
// since server doesn't agree to any ecdh anyway
2
dave_thompson_085 3 Апр 2019 в 19:13