actualmente estamos trabajando con un producto en la nube que usa JSCH internamente para conectarse a fuentes sftp externas. Estoy investigando una excepción de restablecimiento de conexión que recibimos al intentar conectarnos a Azure SFTP.
Usando wireshark, determiné que el problema ocurre después de que enviamos el Cliente: Key Exchange Init. Estableciendo la misma conexión con filezilla no tenemos este problema.
al comparar los paquetes de jsch y filezilla no vi un problema obvio, pero no soy un experto en el protocolo ssh. voy a publicar ambas solicitudes a continuación si alguien pudiera darme algún consejo, sería muy apreciado.
Solicitud con JSCH (no funciona)
Solicitud con Filezilla (funcionando)
Respuesta con Filezilla (funcionando)
Vea a continuación la salida del registro:
INFO: Connecting to ***** port 22 INFO: Connection established INFO: Remote version string: SSH-2.0-AzureSSH_1.0.0 INFO: Local version string: SSH-2.0-JSCH-0.1.54 INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 INFO: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521 INFO: CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 INFO: SSH_MSG_KEXINIT sent INFO: Disconnecting from **** port 22 com.jcraft.jsch.JSchException: Session.connect: java.net.SocketException: Connection reset
EDITAR: siguiendo la sugerencia de Jameses, obtuve el mismo resultado, la conexión se cerró pero la solicitud del cliente solo tenía los algoritmos admitidos como carga útil. Así que traté de replicar la solicitud de FileZilla configurando la configuración de jsch independientemente de si jsch realmente admite el algoritmo, solo quería ver si hay alguna respuesta.
Pero por alguna razón, la conexión aún se termina.
quería publicar una actualización rápida para cualquier persona que tenga el mismo problema, abrí una pregunta similar en el sitio de preguntas y respuestas de microsoft y parece que es un problema en el lado azul en el que están trabajando para solucionarlo para GA Preguntas y respuestas de Microsoft
Gracias al último comentario (de JGiltner62-0227 el 2022-02-18) en https://docs.microsoft.com/en-us/answers/questions/713024/connection-to-azure-sftp-doesnt-work- usando-jsch.html Ahora tengo una implementación de JSCH en funcionamiento. Hay dos cosas que deben cambiarse en el código fuente, ambas en Session.java.
private byte[] V_C=Util.str2byte("SSH-2.0-JSCH-"+JSch.VERSION); // client version
necesita cambiar a:
private byte[] V_C=Util.str2byte("SSH-2.0-JSCH_"+JSch.VERSION); // client version
(La diferencia es un guión bajo en lugar de un guión después de 'JSCH').
byte[] foo=new byte[V_C.length+1];
System.arraycopy(V_C, 0, foo, 0, V_C.length);
foo[foo.length-1]=(byte)'\n';
necesita cambiar a
byte[] foo=new byte[V_C.length+2];
System.arraycopy(V_C, 0, foo, 0, V_C.length);
foo[foo.length-2]=(byte)0x0D;
foo[foo.length-1]=(byte)'\n';
(La variable 'foo' debe ser V_C.length + 2 en lugar de +1, y luego insertamos 0x0D como el penúltimo byte).
Después de realizar estos dos cambios, confirmé que la biblioteca funciona cargando a Azure SFTP.
Desde SSH RFC :
When the connection has been established, both sides MUST send an identification string. This identification string MUST be SSH-protoversion-softwareversion SP comments CR LF Both the 'protoversion' and 'softwareversion' strings MUST consist of printable US-ASCII characters, with the exception of whitespace characters and the minus sign (-). The 'softwareversion' string is primarily used to trigger compatibility extensions and to indicate the capabilities of an implementation. The 'comments' string SHOULD contain additional information that might be useful in solving user problems. As such, an example of a valid identification string is SSH-2.0-billsSSH_3.6.3q3<CR><LF>
Parece que esta biblioteca (y ssh-keyscan) viola la especificación debido al "-" en el segmento de versión de software: JSCH-0.1.54
Como señala Fabian, la "solución" estará disponible antes de SFTP GA.