2012-10-11 25 views
5

Estoy creando muchos objetos diferentes (Session) pasando las credenciales de inicio de sesión a una clase java desde un paquete Oracle pl/sql. Luego guardo estos objetos (Session) en un Vector. La idea es conectar, abrir los canales requeridos, cerrar canales y finalmente desconectar una sesión particular de este Vector. Logré hacerlo, pero funciona solo una vez para cada conexión. Quiero decir, en el Vector I have (session1, session2, session3), cuando llamo a session1.connect() y luego a session1.disconnect(), ya no puedo volver a llamar a session1.connect(), ya que aparentemente intenta a conectar con el servidor, pero luego me sale:Jsch Cómo reutilizar una sesión

Recuperando la sesión almacenada en el vector que abra una sesión y sale:

INFO: Connecting to sftp.myserver.com port 2122 
INFO: Connection established 
INFO: Remote version string: SSH-2.0-OpenSSH_4.7 
INFO: Local version string: SSH-2.0-JSCH-0.1.48 
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: arcfour256 is not available. 
INFO: CheckKexes: diffie-hellman-group14-sha1 
INFO: diffie-hellman-group14-sha1 is not available. 
INFO: SSH_MSG_KEXINIT sent 
INFO: SSH_MSG_KEXINIT received 
INFO: kex: server: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange- sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 
INFO: kex: server: ssh-rsa,ssh-dss 
INFO: kex: server: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,[email protected],aes128-ctr,aes192-ctr,aes256-ctr 
INFO: kex: server: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,[email protected],aes128-ctr,aes192-ctr,aes256-ctr 
INFO: kex: server: hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96 
INFO: kex: server: hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96 
INFO: kex: server: none,[email protected] 
INFO: kex: server: none,[email protected] 
INFO: kex: server: 
INFO: kex: server: 
INFO: kex: client: diffie-hellman-group1-sha1,diffie-hellman-group-exchange-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-sha1-96,hmac-md5-96 
INFO: kex: client: hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96 
INFO: kex: client: none 
INFO: kex: client: none 
INFO: kex: client: 
INFO: kex: client: 
INFO: kex: server->client aes128-ctr hmac-md5 none 
INFO: kex: client->server aes128-ctr hmac-md5 none 
INFO: SSH_MSG_KEXDH_INIT sent 
INFO: expecting SSH_MSG_KEXDH_REPLY 
INFO: ssh_rsa_verify: signature true 
WARN: Permanently added 'sftp.myserver.com' (RSA) to the list of known hosts. 
INFO: SSH_MSG_NEWKEYS sent 
INFO: SSH_MSG_NEWKEYS received 
INFO: SSH_MSG_SERVICE_REQUEST sent 
INFO: SSH_MSG_SERVICE_ACCEPT received 
INFO: Authentications that can continue: publickey,keyboard-interactive,password 
INFO: Next authentication method: publickey 
INFO: Authentications that can continue: password 
INFO: Next authentication method: password 
INFO: Authentication succeeded (password). 
INFO: Disconnecting from sftp.myserver.com port 2122 

Todo funcionaba bien y al final he desconectado session1.

Luego, cuando trato de usar session1 de nuevo consigo la siguiente excepción ...

INFO: Connecting to sftp.myserver.com port 2122 
INFO: Connection established 
INFO: Remote version string: SSH-2.0-OpenSSH_4.7 
INFO: Local version string: SSH-2.0-JSCH-0.1.48 
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: arcfour256 is not available. 
INFO: CheckKexes: diffie-hellman-group14-sha1 
INFO: diffie-hellman-group14-sha1 is not available. 
INFO: SSH_MSG_KEXINIT sent 
INFO: Disconnecting from sftp.myserver.com port 2122 
com.jcraft.jsch.JSchException: Packet corrupt 
at com.jcraft.jsch.Session.start_discard(Session.java:994) 
at com.jcraft.jsch.Session.read(Session.java) 
at com.jcraft.jsch.Session.connect(Session.java:288) 
at com.jcraft.jsch.Session.connect(Session.java:162) 
at sftp.make_dir(SFTP:118) 

¿Estoy haciendo algo mal en la forma en que trato de reutilizar el objeto java (Sesión)?

Gracias mucho por su ayuda

Luca

Respuesta

6
com.jcraft.jsch.JSchException: Packet corrupt 

Una gran cantidad de cosas suceden internamente para establecer una conexión. Cada vez que se crea una sesión, se asocia un número aleatorio (llamado paquete) con esa sesión. Y esta sesión se almacena en un grupo de sesiones JSCH.

Cuando se desconecta la sesión, la sesión se elimina del grupo y el paquete se anula. hay muchas otras cosas que suceden, pero estos 2 son los más importantes para el mensaje de error mencionado anteriormente.

Ahora cuando intenta conectarse usando la sesión que ya ha sido desconectada, no encuentra el paquete y arroja este error.

+0

Gracias por la explicación @tushmish! Perdón por el retraso en marcar esto como una solución. En ese momento, mi "solución alternativa" era crear un conjunto personalizado de objetos de Sesiones almacenados en una Lista de Arreglos y luego cuidar de eliminarlos. No elegante, lo sé, pero trabajando para lo que tenía que hacer. – Luca

Cuestiones relacionadas