8
votes

I have made an SSH client with JSch. The client is working correctly with my Apache Mina SSH server. But when I test it with a real equipment, it fails.

This is the code of the client:

public boolean openConnection() throws ItsSshException {

   boolean connectSuccess = false;
   Properties config = new Properties();
   config.put("StrictHostKeyChecking", "no");
   jschSSH.setConfig(config);
    try {
     sshSession = jschSSH.getSession(username, hostname, port);
     sshSession.setPassword(password);
     sshSession.connect(connectionTimeout);
     LOGGER.info("Connection timeout : " + connectionTimeout);
     Thread.sleep(1000);
     sshHChannel = sshSession.openChannel("shell");
     sshHChannel.connect();
     in = sshHChannel.getInputStream();
     out = new PrintStream(sshHChannel.getOutputStream());
     clearInitialSocketState();
     connectSuccess = true;
   } catch (Exception e) {
     LOGGER.error("Error during connecting to host: " + hostname +
                  ", port: " + port + "!", e);
     throw new ItsSshException("Error during connecting to host: " + e.getMessage());
   }
   LOGGER.info("connectSuccess : " + connectSuccess);
   return connectSuccess;
}

The code is failing at this point:

sshHChannel = sshSession.openChannel("shell");

Error during connecting to host: 127.0.0.1, port: 22!
com.jcraft.jsch.JSchException: session is down
at com.jcraft.jsch.Session.openChannel(Session.java:861)

My question is how to fix this problem and what can make it to occure?

This is JSch log:

INFO: Connecting to 127.0.0.1 port 22 
INFO: Connection established 
INFO: Remote version string: SSH-2.0-Mocana SSH
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: 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: CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
INFO: SSH_MSG_KEXINIT sent
INFO: SSH_MSG_KEXINIT received
INFO: kex: server: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
INFO: kex: server: ssh-dss,ssh-rsa
INFO: kex: server: aes256-cbc,rijndael256-cbc,aes192-cbc,rijndael192-cbc,aes128-cbc,rijndael128-cbc,3des-cbc,arcfour
INFO: kex: server: aes256-cbc,rijndael256-cbc,aes192-cbc,rijndael192-cbc,aes128-cbc,rijndael128-cbc,3des-cbc,arcfour
INFO: kex: server: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
INFO: kex: server: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
INFO: kex: server: none
INFO: kex: server: none
INFO: kex: server: 
INFO: kex: server: 
INFO: kex: client: diffie-hellman-group1-sha1
INFO: kex: client: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
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: kex: server->client aes128-cbc hmac-md5 none
INFO: kex: client->server aes128-cbc hmac-md5 none
INFO: SSH_MSG_KEXDH_INIT sent
INFO: expecting SSH_MSG_KEXDH_REPLY
INFO: ssh_rsa_verify: signature true
WARN: Permanently added '127.0.0.1' (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: keyboard-interactive,password
INFO: Next authentication method: keyboard-interactive
INFO: Authentications that can continue: password
INFO: Next authentication method: password
INFO: Authentication succeeded (password).
INFO: Caught an exception, leaving main loop due to End of IO Stream Read
INFO: Disconnecting from 127.0.0.1 port 22
2
The exception is in openChannel. On this row: sshHChannel = sshSession.openChannel("shell"); - xmlParser
And btw about the seccond comment. I gave you reputation about the answer because it helped me at the first point. But my question then was more complicated and thats why it didnt helped me in the discusion. - xmlParser
Moreover, you are already using LOGGER.info, so why don't you use that? - Martin Prikryl
Why do you have Thread.sleep(1000); there? + Can you add timestamps to the log? And include a log entry before the sshSession.openChannel("shell");? - Martin Prikryl

2 Answers

2
votes

Try to use:

Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications", "password");
jschSSH.setConfig(config);

and also set

sshSession.connect(connectionTimeout) to 5000 or more.

also as Martin said

remove Thread.sleep(1000);
2
votes

Remove this:

Thread.sleep(1000);

The server probably times out waiting for a request from the client (JSch) and aborts the connection.