我需要運行ssh命令來打開GUI應用程序。 我能夠讓Jsch運行這些命令,GUI顯示在客戶端機器上。我的問題是我似乎無法超越20個Jsch頻道。我認識到,服務器有一個控制用戶可以在這裏這似乎是20.我不明白是怎麼重用現有的連接,但運行不同的命令ssh連接數的設置....帶x11forwarding的Jsch shell命令 - 重用通道並運行新命令
我試圖運行的命令兩種不同的方式:
EXAMPLE Command:
String command = "cd /home/test;xterm ";
String command = "cd /home/test;nedit myfile.txt ";
「1方式」)運行的每個命令創建一個新的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應用程序,它似乎並不釋放,因爲它仍然認爲我已經刷爆了,所以我得到JschException上channel.connect()的ssh連接;
我的問題是所有的命令打開GUI應用程序,因此當應用程序被關閉,關閉通道連接我不能告訴。
我寫的「其他方法」的方法思考,它不會創建一個新的ssh連接,但我應該被允許使用現有的連接,但發送一個新的命令。顯然它不會那樣工作。
我怎樣才能做到利用一個ssh連接時連接(命令)被調用運行不同的命令? Jsch有可能嗎?
如果您只想在每個通道中執行一條命令,請使用exec通道而不是shell通道。 (不過,我不知道這是否對你的問題有幫助。) – 2012-09-22 17:18:01
另外,你爲什麼要在你的「第二」方式上再次調用'connect()'? – 2012-09-22 17:20:42