2011-04-05 65 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