我怎样才能在JSch中重用shell通道

时间:2017-06-13 07:28:23

标签: java ssh jsch

我需要反复向某些设备发送一些命令以获得一些结果,

我使用JSch连接设备并将命令发送给它们,然后解析结果,

我发现每次发送命令,我都需要创建一个新的通道,并且必须等待一到两秒才能销毁前一个通道,然后程序可以成功创建一个新通道。

我想知道有什么方法可以重用shell通道吗?所以我不需要每次都创建一个新的频道,也不需要等待前频道被破坏。

我的代码是这样的: 创建会话:

JSch jsch = new JSch();
session = jsch.getSession(userName, deviceIp, 22);
session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setServerAliveInterval(5000);
session.connect(60 * 1000);

创建通道(线程需要休眠约3秒才能等待前一个通道被破坏)

Thread.sleep(3000);
channel = (ChannelShell)session.openChannel("shell");
ops = channel.getOutputStream();
ps = new PrintStream(ops, true);
channel.connect(60 * 1000);
in = new BufferedReader(new InputStreamReader(channel.getInputStream()));
ps.println("command-1");
ps.println("command-2");
while ((current = in.readLine()) != null) {
    // parse the results
}
// close the channel
channel.disconnect()

编辑:

  1. 我在解析结果后尝试再次向通道发送命令,但它不起作用。

  2. 我使用线程池向设备发送命令,因此在连接到设备后,我将会话保存到静态地图中,然后我可以检索到每个设备的连接

0 个答案:

没有答案