Jsch-一个会话多个通道

我设法用Jsch通过ssh执行了一条命令,但是当我尝试执行第二条命令时却失败了

为了调试,我将此问题归结为以下几行:

import java.io.IOException;

import java.io.InputStream;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelExec;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.JSchException;

import com.jcraft.jsch.Session;

public class Exec {

public static void test(Session session) throws Exception {

Channel channel = session.openChannel("exec");

((ChannelExec) channel).setCommand("pwd");

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();

}

public static void main(String[] arg) {

try {

JSch jsch = new JSch();

Session session = jsch.getSession("nck", "127.0.0.1", 22);

session.setPassword("asd");

session.setConfig("StrictHostKeyChecking", "no");

session.connect();

test(session); // This one succeeds with exit-status: 0

test(session); // This one fails with exit-status: 255

session.disconnect();

} catch (Exception e) {

//

}

}

}

这主要是官方的Exec示例,但这给了我以下输出:

/home/nck

exit-status: 0

exit-status: 255

第一个命令成功执行,第二个则没有成功。

有任何想法吗 ?

回答:

嘿,jsch和Ubuntu完全一样。(如何)解决了?为每个执行执行新会话会浪费太多时间?此刻,我捕获了jsch异常并搜索“会话未关闭”,然后我重新连接了该会话并再次执行命令。可行,但不是一个好的解决方案。

编辑:我现在使用错误的方式解决了我的问题

channel = session.openChannel("shell");

而不是“ exec”。

以上是 Jsch-一个会话多个通道 的全部内容, 来源链接: utcz.com/qa/429172.html

回到顶部