0

As I come to know that LeeDavidPainter is the author of j2ssh plugin. I wanted to ask a question in which I am stuck on. I am trying to connect to a system using the j2ssh plugin with just IP and password. I see this stack trace:

INFO: Loading key exchange methods
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.publickey.SshKeyPairFactory <clinit>
INFO: Loading public key algorithms
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.compression.SshCompressionFactory <clinit>
INFO: Loading compression methods
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.hmac.SshHmacFactory <clinit>
INFO: Loading message authentication methods
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.TransportProtocolCommon startTransportProtocol
INFO: Starting transport protocol
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.TransportProtocolCommon run
INFO: Registering transport protocol messages with inputstream
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon negotiateVersion
INFO: Negotiating protocol version
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon negotiateVersion
INFO: Protocol negotiation complete
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon sendMessage
INFO: Sending SSH_MSG_KEX_INIT
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon startBinaryPacketProtocol
INFO: Received SSH_MSG_KEX_INIT
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon beginKeyExchange
INFO: Starting key exchange
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon sendMessage
INFO: Sending SSH_MSG_DISCONNECT
com.sshtools.j2ssh.transport.TransportProtocolException: The connection did not complete
    at com.sshtools.j2ssh.transport.TransportProtocolClient.onStartTransportProtocol(Unknown Source)
    at com.sshtools.j2ssh.transport.TransportProtocolCommon.startTransportProtocol(Unknown Source)
    at com.sshtools.j2ssh.SshClient.connect(Unknown Source)
    at com.sshtools.j2ssh.SshClient.connect(Unknown Source)
    at checkThat.connect(checkThat.java:34)
    at checkThat.main(checkThat.java:19)

I saw one of his posts in which he said this is out of date and I could use a new plugin by you which is J2SSH Maverick.

But when I used that I see the methods that I am using here are not compatible with the new plugin. SO Do I have to change the methods as well. I will show my code as well below.

import java.io.IOException;
import java.util.List;
import com.sshtools.j2ssh.SshClient;
import com.sshtools.j2ssh.authentication.AuthenticationProtocolState;
import com.sshtools.j2ssh.authentication.KBIAuthenticationClient;
import com.sshtools.j2ssh.authentication.PasswordAuthenticationClient;
import com.sshtools.j2ssh.transport.IgnoreHostKeyVerification;


public class checkThat {


public static void main(String s[])
{
    try {
        connect();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public static void connect() throws Exception {
    try {
        int result =-1;
        String m_sUser= "user";
        String m_sPassword="pswd";

        SshClient ssh = new SshClient();  
        try{
        ssh.connect("1.1.1.1", 22, new IgnoreHostKeyVerification());
        }catch (IOException ie)
        {
            ie.printStackTrace();
        }

        //System.out.println( "Connect successful");


        List authType = ssh.getAvailableAuthMethods(m_sUser);
        if(!authType.isEmpty() && authType.contains("password"))
          {
            //m_logger.severe("FTSSH:Connected to host via password");
            PasswordAuthenticationClient pwd = new PasswordAuthenticationClient();
            pwd.setUsername(m_sUser);
            pwd.setPassword(m_sPassword);
            // Authenticate the user
            result = ssh.authenticate(pwd);
          }
        else
          {
            //m_logger.severe("FTSSH:Connected to host via KBI");
            KBIAuthenticationClient kbi = new KBIAuthenticationClient();
            kbi.setUsername(m_sUser);
            /*ASCKBIRequestHandler kbiHandler = new ASCKBIRequestHandler();
            kbiHandler.setPassCode(m_sPassword);
            kbi.setKBIRequestHandler(kbiHandler);*/
            //  Authenticate the user
            result = ssh.authenticate(kbi);
          }

        /* Authenticate.
         * If you get an IOException saying something like
         * "Authentication method password not supported by the server at this stage."
         */
        PasswordAuthenticationClient pwd = new PasswordAuthenticationClient();
        pwd.setUsername("user");
        pwd.setPassword("pswd");

         result = ssh.authenticate(pwd);

        if (result != AuthenticationProtocolState.COMPLETE){                
            throw new Exception("Login to  failed");
        } 

        /*session =     ssh.openSessionChannel();
        sor = new SessionOutputReader(session);
        // Request a pseudo terminal, if you do not you may not see the prompt
        session.requestPseudoTerminal("gogrid",80,48, 0 , 0, "");
        // Start the users shell
        session.startShell();*/

    } catch (Exception e) {
        //log.error(e.getMessage(), e);
        System.out.println( e.getMessage());
         e.printStackTrace();
        throw new Exception("Login to  failed");
    }

}
}

So here if I change the .jar file from j2ssh to j2ssh maverick, the methods such as sshClient, ignoreHostKeyVerification, PasswordAuthenticationClient, etc. are not resolved.

What could be the issue?

Gediminas Masaitis
  • 3,172
  • 14
  • 35
T_C
  • 1
  • 1
  • 1

1 Answers1

1

The J2SSH API and J2SSH Maverick API are different products. So you cannot expect to use the same source code without refactoring it. I have mentioned in the past that the APIs are similar, they are. But being a complete rewrite the Maverick API has improvements/differences that mean you will need to look at the examples provided with it.

I recommend you take a look at the PasswordConnect.java example of J2SSH Maverick.

  • Thanks for reply Lee David. Actually for my case changing the code will not be a feasible solution. Could you suggest some other thing which could possibly be the solution of this transport protocol exception in which I would not need to change the code or may be some workaround. – T_C Mar 10 '16 at 13:53
  • The J2SSH Maverick API is old and has not been actively maintained since around 2008. You really should be looking at updating to a maintained API. – Lee David Painter Mar 11 '16 at 14:28