2012-10-11 6 views
5

Ich erstelle viele verschiedene (Session) -Objekte, die die Anmeldedaten an eine Java-Klasse aus einem Oracle pl/sql-Paket übergeben. Ich speichere dann diese (Session-) Objekte in einem Vector. Die Idee besteht darin, eine Verbindung herzustellen, die erforderlichen Kanäle zu öffnen, Kanäle zu schließen und schließlich eine bestimmte Sitzung von diesem Vektor zu trennen. Ich habe es geschafft, aber es funktioniert nur einmal für jede Verbindung. Ich meine, in dem Vector, den ich habe (session1, session2, session3), wenn ich session1.connect() und dann session1.disconnect() anrufe, kann ich session1.connect() nicht mehr aufrufen, da es anscheinend versucht wird um mit dem Server zu verbinden, aber dann bekomme ich:JSCH Wie man eine Sitzung wieder verwendet

die Sitzung im Vektor gespeichert Abrufen eröffne ich eine Sitzung und erhalte:

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 

Alles hat gut funktioniert und am Ende getrennt ich session1.

Dann, wenn ich versuche session1 zu verwenden wieder erhalte ich die folgende Ausnahme ...

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) 

Bin ich etwas falsch in der Art und Weise tun, ich versuche, das Java-Objekt (Session) wieder zu verwenden?

sehr vielen Dank für Ihre Hilfe

Luca

Antwort

6
com.jcraft.jsch.JSchException: Packet corrupt 

Eine Menge Dinge passiert intern eine Verbindung aufzubauen. Jedes Mal, wenn eine Sitzung erstellt wird, ist dieser Sitzung eine Zufallszahl (Paket genannt) zugeordnet. Und diese Sitzung wird in einem JSCH-Sitzungspool gespeichert.

Wenn die Sitzung getrennt wird, wird die Sitzung aus dem Pool entfernt und das Paket wird ungültig gemacht. Es gibt viele andere Dinge, die passieren, aber diese 2 sind am wichtigsten für die oben genannte Fehlermeldung.

Wenn Sie jetzt versuchen, eine Verbindung mit der Sitzung herzustellen, die bereits getrennt wurde, findet es das Paket nicht und löst diesen Fehler aus.

+0

Danke für die Erklärung @tushmish! Entschuldigung für die Verzögerung bei der Kennzeichnung als Lösung. Zu dieser Zeit erstellte mein "Workaround" einen benutzerdefinierten Pool von Sessions-Objekten, die in einer ArrayList gespeichert waren, und kümmerte sich dann darum, sie zu entsorgen. Nicht elegant, aber ich arbeite für das, was ich tun musste. – Luca