I need to execute commands on remote SSH server in Java. I'm using JSch for that.
A Command 1 is a command to setup an environment on Linux machine and which requires some time to execute (about 20 minutes). Command 1 is a one time operation. If I open a PuTTY session I need to execute the Command 1 only once.
A Command 2 dependents on the Command 1. It does not execute without the Command 1.
Once the Command 1 is executed (one time operation), the Command 2 (requires 2-3 seconds to execute) can be executed for different entities without the Command 1 being executed again.
I know I can do it with commands separated by &&, but in that way the Command 1 will execute unnecessarily degrading overall performance.
Code:
String host = "1.1.1.1";
String user = "parag";
String password = "abcdf";
String command1 = "command1";
String command2 = "command2";
try {
    java.util.Properties config = new java.util.Properties();
    config.put("StrictHostKeyChecking", "no");
    JSch jsch = new JSch();
    Session session = jsch.getSession(user, host, 22);
    session.setConfig(config);
    session.setPassword(password);
    session.connect();
    System.out.println("Connected");
    Channel channel = session.openChannel("exec");
    ((ChannelExec) channel).setCommand(command1 + " && " + command2);
    channel.setInputStream(null);
    ((ChannelExec) channel).setErrStream(System.err);
    InputStream in = channel.getInputStream();
    channel.connect();
    byte[] tmp = new byte[1024];
    while (true) {
        while (in.available() > 0) {
            int i = in.read(tmp, 0, 1024);
            if (i < 0)
                break;
            System.out.print(new String(tmp, 0, i));
        }
        if (channel.isClosed()) {
            System.out.println("exit-status: " + channel.getExitStatus());
            break;
        }
        try {
            Thread.sleep(1000);
        } catch (Exception ee) {
        }
    }
    channel.disconnect();
    session.disconnect();
    System.out.println("DONE");
} catch (Exception e) {
    e.printStackTrace();
}
Please let me know if this is possible. Also suggest an alternative if any, in case this is not possible with JSch.
 
    