我需要运行 ssh 命令来打开 GUI 应用程序。我能够让 Jsch 运行命令,并且 GUI 显示在客户端计算机上。我的问题是我似乎无法超过 20 个 Jsch 频道。我意识到服务器有一个设置来控制用户可以建立的 ssh 连接数,这里似乎是 20。我不明白的是如何重用现有连接但运行不同的命令....
我尝试以两种不同的方式运行命令:
EXAMPLE Command:
String command = "cd /home/test;xterm ";
String command = "cd /home/test;nedit myfile.txt ";
"1 way") 每个运行命令都会创建一个新的 Jsch 通道:
private void connect (String command) {
Channel channel = session.getChannel("shell");
channel.setXForwarding(true);
StringBufferInputStream reader = new StringBufferInputStream(command + " \n");
channel.setInputStream(reader);
channel.connect();
}
[ 此代码为每个新命令创建一个新通道。有效,但达到 20 ssh 连接限制。]
或者
“另一种方式”)试图重用通道来运行一个新命令,其中通道是一个全局变量:
int numruns =0;
private void connect (String command, int channelId) {
String cmd = command + " \n";
if (channel == null) {
numruns = 0;
channel = session.openChannel("shell");
channel.setXForwarding(true);
channel.connect();
stdIn = channel.getOutputStream();
stdOut = channel.getInputStream();
} else {
channel.connect(channelId);
}
((OutputStream)stdIn).write(cmd.getBytes());
stdIn.flush();
numruns++;
}
[“其他方式”打开应用程序,但它似乎创建了新的 ssh 连接。所以我仍然有 20 个 ssh 连接限制。]
所以看起来服务器只允许最多 20 个 ssh 连接。但是为什么它不能与“其他方式”一起使用?
所以当我关闭我的 GUI 应用程序时,它似乎并没有释放 ssh 连接,因为它仍然认为我已经用尽了,所以我在 channel.connect(); 上得到了 JschException;
我的问题是所有命令都会打开 GUI 应用程序,所以我不知道该应用程序何时关闭以关闭通道连接。
我编写了“其他方式”方法,认为它不会创建新的 ssh 连接,但应该允许我使用现有连接但发送新命令。显然它不是那样工作的。
调用 connect(command) 时,如何使用一个 ssh 连接运行不同的命令?Jsch有可能吗?