JSch: comment maintenir la session en vie

Je suis en train d'écrire Java GUI programme pour la statique de la gestion de l'itinéraire à l'aide de SSH. Mon code est comme suit:

import com.jcraft.jsch.*;
import java.io.*;
public class Konsep {
String status;
static String username;
static String hostname;
String inputcommand;
String output;
static Session session;
JSch jsch = new JSch();
public String status(String stringstatus) {
stringstatus = status;
return stringstatus;
}
public String InputCommand(String inputcommandstatus) {
inputcommandstatus = inputcommand;
return inputcommandstatus;
}
public void connect(String usernamelokal, String hostnamelokal,
String password, int port) {
//       JSch jsch=new JSch();
try {
Session sessionlokal = jsch.getSession(usernamelokal,
hostnamelokal, port);
sessionlokal.setPassword(password);
UserInfo ui = new UserInfoku.Infoku();
sessionlokal.setUserInfo(ui);
sessionlokal.setTimeout(0);
sessionlokal.connect();
status = "tersambung \n";
username = usernamelokal;
hostname = hostnamelokal;
session = sessionlokal;
System.out.println(username + " " + hostname);
} catch (Exception e) {
System.out.println(e);
status = "Exception = \n " + e + "\n";
}
}
public void disconnect() {
//       JSch jsch=new JSch();
try {
Session sessionlokal = jsch.getSession(username, hostname);
//           System.out.println(username +" "+ hostname);
sessionlokal.disconnect();
status = "wes pedhoott \n";
} catch (Exception e) {
System.out.println(e);
status = "Exception = \n " + e + "\n";
}
}
public void addRoute() {
//       JSch jsch=new JSch();
System.out.println(username + " " + hostname);
try {
Session sessionlokal = session; //=jsch.getSession(username, hostname);
Channel channel = sessionlokal.openChannel("exec");
((ChannelExec) channel).setCommand(inputcommand);
channel.setInputStream(null);
channel.connect();
((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();
} catch (Exception e) {
System.out.println(e);
}
}
}      

Le problème est que lorsque j'appelle la méthode de connexion, puis d'appeler la addroute, le programme renvoie

root 192.168.50.2
root 192.168.50.2
com.jcraft.jsch.JSchException: session is down

J'ai essayé d'obtenir le statut de la session, soit avec

Session sessionlokal=session; //returns com.jcraft.jsch.JSchException: ChannelExec

ou

Session sessionlokal=jsch.getSession(username, hostname); //returns session is down

J'ai aussi essayé d'utiliser le keepalive, mais sa ne fonctionne pas non plus.

Mon intention est de créer une session sur l'hôte (log in), tout en laissant la séance, exécuter une commande ou des commandes, et peut-être l'exécution d'autres commandes plus tard, et puis de la fermeture de la session lorsqu'il n'est pas nécessaire (fin de session).
J'ai cherché sur ce forum et j'ai trouvé ce question mais le code est de créer une méthode pour définir une commande à exécuter en premier, puis la création de la session, appelez la commande de la méthode et de fermer la session.

Des idées sur la façon de le faire comme je l'ai mentionné ci-dessus ?

source d'informationauteur user2277956