I am new to JSch and i am using it to connect to a remote linux machine. I am creating a session and opening a channel to execute a command on the linux machine. This command takes nearly half an hour to execute and give an output. But the session expires after 15 minutes. I need the session to be active till the command completes execution. How can I make the session last longer?
Even the usage of sendKeepAliveMsg() function is not keeping the session active for not more than 15 minutes.
The code i am using is as below
JSch jsch=new JSch();
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
Session session = null;
try
{
session = jsch.getSession(user,client_ip,22);
session.setPassword(secure_pwd);
session.setConfig(config);
session.connect();
session.sendKeepAliveMsg();
Channel channel = null;
channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
InputStream in = null;
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;
}
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
Thanks in advance
You have to call the sendKeepAliveMsg regularly.
Calling it once at start has no effect.
Though easiers is (as @Aniruddh also answered) to let JSch send the keepalives automatically. Just call Session.setServerAliveInterval.
Idle timeout for jsch can be adjusted using the following setServerAliveInterval
Additionally some other timeouts connected related can be specified in code as well, for example
session.connect(5000);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With