2011-04-05 72 views
2

我正在尋找一個庫,允許我創建讓遠程命令執行的3個線程執行每個命令需要13分鐘。你會建議什麼樣的ssh lib文件,它可以執行這樣的任務? (免費Maveric版本 - 失敗不願意支付2.4k $的完整庫,現在使用ssh2 ...)支持java的SSH庫很好的支持多線程!

+0

爲什麼不使用任何SSH LIB用'Executor' /'ExecutorService'結合起來呢? – musiKk 2011-04-05 06:59:54

+0

@musiKk,並非所有的SSH庫都是以線程安全的方式編寫的。如果通過他們的郵件列表,JSch顯然在今天出現了這個問題(除非已經改變)。 – 2011-04-05 07:08:29

+0

@Vineet:對不起,也許我沒有充分檢查我的事實。唉,WhiteFang34似乎不同意。 ;) – musiKk 2011-04-05 07:42:03

回答

4

我從個人經驗知道,JSch正常工作,只要你創建一個單獨的SSH連接每個線程。還有sshjGanymed SSH-2,你可能想看看。

這裏的遠程命令執行與JSch一個簡單的例子:

JSch jsch = new JSch(); 

Session session = jsch.getSession(user, host); 
session.setConfig("StrictHostKeyChecking", "no"); 
session.setPassword(password); 
session.connect(timeout); 

Channel channel = session.openChannel("exec"); 
ChannelExec channelExec = (ChannelExec) channel; 
channelExec.setCommand(command); 
channel.connect(); 

// read channel.getInputStream() here if you want to capture the output 

channel.disconnect(); 
session.disconnect(); 
+0

+1,SSH的性質自然不會「多線程」。這是一個命令流,流本身是連續的。 – gustafc 2011-04-05 07:50:06

+0

我與Jsch唯一的問題是它沒有任何ducumentation(比ssh2 == GANYMED SSH-2長3倍) - >導致不能在沒有愚蠢的輸入流的情況下打SHELL插入我的意思是start.shell(); execute.command(字符串); execute.command(字符串); end.shell();但可能你解決了這個神祕的問題(我想我已經在你的一篇文章中看到了關於shell多重命令(在應用程序中沒有從鍵盤讀取)的東西) – user615927 2011-04-05 08:37:59

+0

我用一個工作示例更新了答案,你只需要填寫變量。 – WhiteFang34 2011-04-05 08:55:01