La negociación del algoritmo JSch falla

Intento conectar el servidor SFTP por Java.

Tengo un error

com.jcraft.jsch.JSchException: error en la negociación del algoritmo

Aquí está el POM:

 com.jcraft jsch 0.1.53  

Aquí está el registro:

 INFO: Connecting to **"FTP ADRESS"** port 22 INFO: Connection established INFO: Remote version string: SSH-2.0-Maverick_SSHD INFO: Local version string: SSH-2.0-JSCH-0.1.53 INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 INFO: aes256-ctr is not available. INFO: aes192-ctr is not available. INFO: aes256-cbc is not available. INFO: aes192-cbc is not available. INFO: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521 INFO: diffie-hellman-group14-sha1 is not available. INFO: ecdh-sha2-nistp256 is not available. INFO: ecdh-sha2-nistp384 is not available. INFO: ecdh-sha2-nistp521 is not available. INFO: CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 INFO: ecdsa-sha2-nistp256 is not available. INFO: ecdsa-sha2-nistp384 is not available. INFO: ecdsa-sha2-nistp521 is not available. INFO: SSH_MSG_KEXINIT sent INFO: SSH_MSG_KEXINIT received INFO: kex: server: diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1 INFO: kex: server: ssh-rsa INFO: kex: server: aes256-cbc,aes192-cbc INFO: kex: server: aes256-cbc,aes192-cbc INFO: kex: server: hmac-sha1,hmac-sha1-96 INFO: kex: server: hmac-sha1,hmac-sha1-96 INFO: kex: server: none INFO: kex: server: none INFO: kex: server: INFO: kex: server: INFO: kex: client: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 INFO: kex: client: ssh-rsa,ssh-dss INFO: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc INFO: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc INFO: kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96 INFO: kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96 INFO: kex: client: none INFO: kex: client: none INFO: kex: client: INFO: kex: client: INFO: Disconnecting from "FTP ADRESS" port 22 

Recibí este error de lo que intenté arreglar. No puedo acceder al servidor SFTP para descargar o actualizar ningún archivo, etc.

Puedo conectar el servidor con FileZilla, pero no puedo hacerlo con Java.

Código de conexión:

 JSch jsch = new JSch(); Properties config = new Properties(); config.put("cipher.s2c", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-ctr,aes192-cbc,aes256-ctr,aes256-cbc"); config.put("cipher.c2s", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-ctr,aes192-cbc,aes256-ctr,aes256-cbc"); config.put("kex", "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256"); Session jschSession = jsch.getSession("username","server",22); jschSession.setConfig("StrictHostKeyChecking", "no"); jschSession.setPassword("password"); jschSession.setConfig(config); jschSession.connect(); 

Cuando agregué

 config.put("cipher.s2c", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-ctr,aes192-cbc,aes256-ctr,aes256-cbc"); 

los registros son así

 INFO: Connecting to ftp.servername port 22 INFO: Connection established INFO: Remote version string: SSH-2.0-Maverick_SSHD INFO: Local version string: SSH-2.0-JSCH-0.1.53 INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 INFO: aes256-ctr is not available. INFO: aes192-ctr is not available. INFO: aes256-cbc is not available. INFO: aes192-cbc is not available. INFO: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521 INFO: diffie-hellman-group14-sha1 is not available. INFO: ecdh-sha2-nistp256 is not available. INFO: ecdh-sha2-nistp384 is not available. INFO: ecdh-sha2-nistp521 is not available. INFO: CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 INFO: ecdsa-sha2-nistp256 is not available. INFO: ecdsa-sha2-nistp384 is not available. INFO: ecdsa-sha2-nistp521 is not available. INFO: SSH_MSG_KEXINIT sent INFO: SSH_MSG_KEXINIT received INFO: kex: server: diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1 INFO: kex: server: ssh-rsa INFO: kex: server: aes256-cbc,aes192-cbc INFO: kex: server: aes256-cbc,aes192-cbc INFO: kex: server: hmac-sha1,hmac-sha1-96 INFO: kex: server: hmac-sha1,hmac-sha1-96 INFO: kex: server: none INFO: kex: server: none INFO: kex: server: INFO: kex: server: INFO: kex: client: diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256 INFO: kex: client: ssh-rsa,ssh-dss INFO: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc INFO: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc INFO: kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96 INFO: kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96 INFO: kex: client: none INFO: kex: client: none INFO: kex: client: INFO: kex: client: INFO: Disconnecting from ftp.servername port 22 com.jcraft.jsch.JSchException: Algorithm negotiation fail 

Como puede ver, el servidor ofrece estas cifras:

INFORMACIÓN: kex: servidor: aes256-cbc, aes192-cbc

Pero JSch solo acepta estos:

INFORMACIÓN: kex: cliente: aes128-ctr, aes128-cbc, 3des-ctr, 3des-cbc, blowfish-cbc

No hay una cifra común para elegir.


Tenga en cuenta que JSch es compatible con aes256-cbc y aes192-cbc, pero requiere JCE (Java Cryptography Extension) para permitirlos.

Probablemente no tenga JCE, por lo que estas cifras no están disponibles. Es por eso que hay

INFORMACIÓN: aes256-cbc no está disponible.


Descargar Java Cryptography Extension (JCE) Archivos de política de jurisdicción de fuerza ilimitada 8 (u otra versión si no se usa JDK 1.8).

Vea también una respuesta a El cifrado ‘aes256-cbc’ es obligatorio, pero no está disponible .

Lo resuelvo agregando la siguiente línea a / etc / ssh / sshd_config y reinicio el servicio sshd. Gracias por responder por @wierzbiks en otro hilo

 KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 

Lo resuelvo actualizando la librería jsch-0.1.27.jar a jsch-0.1.54.jar.

Finalmente en tu código deberías escribir algo como esto:

 your Method { session.setConfig("StrictHostKeyChecking", "no"); // That solve the problem. } 

Este código funciona en Java 1.5 o superior si necesita esta versión de Java.