Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SSHJ与多线程_Java_Sshj - Fatal编程技术网

Java SSHJ与多线程

Java SSHJ与多线程,java,sshj,Java,Sshj,我有一个关于SSHJ和多线程的问题。我有一个类,它使用SSHJ在远程服务器上使用SSHJ-SSHExec类执行命令,它是线程的扩展。我这样做是因为一些远程命令可能需要一段时间才能运行,我希望并行运行它们,因为它们不会相互影响 因此,在我的设置中,我有一个类可以启动多个版本的类,它是执行SSH命令的程序。当我将类_A配置为只启动类_B的一个实例时,一切正常。但是,当我将类_A配置为启动多个类_B实例时,它会失败,并出现以下错误 Aug 2, 2012 12:08:44 PM backup.SSHE

我有一个关于SSHJ和多线程的问题。我有一个类,它使用SSHJ在远程服务器上使用SSHJ-SSHExec类执行命令,它是线程的扩展。我这样做是因为一些远程命令可能需要一段时间才能运行,我希望并行运行它们,因为它们不会相互影响

因此,在我的设置中,我有一个类可以启动多个版本的类,它是执行SSH命令的程序。当我将类_A配置为只启动类_B的一个实例时,一切正常。但是,当我将类_A配置为启动多个类_B实例时,它会失败,并出现以下错误

Aug 2, 2012 12:08:44 PM backup.SSHExec run
SEVERE: null
net.schmizz.sshj.transport.TransportException: Unexpected: SSH_MSG_UNIMPLEMENTED
    at net.schmizz.sshj.transport.TransportException$1.chain(TransportException.java:33)
    at net.schmizz.sshj.transport.TransportException$1.chain(TransportException.java:27)
    at net.schmizz.concurrent.Promise.deliverError(Promise.java:95)
    at net.schmizz.concurrent.Event.deliverError(Event.java:72)
    at net.schmizz.concurrent.ErrorDeliveryUtil.alertEvents(ErrorDeliveryUtil.java:34)
    at net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:576)
    at net.schmizz.sshj.transport.Reader.run(Reader.java:79)
Caused by: net.schmizz.sshj.common.SSHException: [PROTOCOL_ERROR] Unexpected: SSH_MSG_UNIMPLEMENTED
    at net.schmizz.sshj.AbstractService.notifyUnimplemented(AbstractService.java:66)
    at net.schmizz.sshj.transport.TransportImpl.gotUnimplemented(TransportImpl.java:555)
    at net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:490)
    at net.schmizz.sshj.transport.Decoder.decode(Decoder.java:127)
    at net.schmizz.sshj.transport.Decoder.received(Decoder.java:195)
    at net.schmizz.sshj.transport.Reader.run(Reader.java:72)
Exception in thread "Thread-18" java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:61)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
    at backup.StreamReader.run(StreamReader.java:86)
Exception in thread "Thread-17" java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:61)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
    at backup.StreamReader.run(StreamReader.java:86)
Aug 2, 2012 12:08:44 PM backup.SSHExec run
SEVERE: null
net.schmizz.sshj.transport.TransportException: socket closed
    at net.schmizz.sshj.transport.TransportImpl.init(TransportImpl.java:164)
    at net.schmizz.sshj.SSHClient.onConnect(SSHClient.java:671)
    at net.schmizz.sshj.SocketClient.connect(SocketClient.java:71)
    at net.schmizz.sshj.SocketClient.connect(SocketClient.java:77)
    at net.schmizz.sshj.SocketClient.connect(SocketClient.java:103)
    at backup.SSHExec.run(SSHExec.java:73)
    at backup.SSHExec.exec(SSHExec.java:42)
    at backup.BackupExec2.copyPrevBackup(BackupExec2.java:335)
    at backup.BackupExec2.run(BackupExec2.java:164)
Caused by: java.net.SocketException: socket closed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.net.SocketInputStream.read(SocketInputStream.java:182)
    at net.schmizz.sshj.transport.TransportImpl.init(TransportImpl.java:158)
    ... 8 more
Exception in thread "Thread-23" java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:61)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
    at backup.StreamReader.run(StreamReader.java:86)
Exception in thread "Thread-24" java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:61)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
    at backup.StreamReader.run(StreamReader.java:86)
2012年8月2日12:08:44 PM backup.SSHExec运行
严重:空
net.schmizz.sshj.transport.TransportException:意外:SSH\u MSG\u未实现
net.schmizz.sshj.transport.TransportException$1.chain(TransportException.java:33)
net.schmizz.sshj.transport.TransportException$1.chain(TransportException.java:27)
net.schmizz.concurrent.Promise.delivereError(Promise.java:95)
net.schmizz.concurrent.Event.deliverError(Event.java:72)
位于net.schmizz.concurrent.ErrorDeliveryUtil.alertEvents(ErrorDeliveryUtil.java:34)
net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:576)
net.schmizz.sshj.transport.Reader.run(Reader.java:79)
原因:net.schmizz.sshj.common.SSHException:[协议错误]意外:SSH\u MSG\u未实现
位于net.schmizz.sshj.AbstractService.notifyUnimplemented(AbstractService.java:66)
net.schmizz.sshj.transport.TransportImpl.gotUnimplemented(TransportImpl.java:555)
位于net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:490)
net.schmizz.sshj.transport.Decoder.decode(Decoder.java:127)
net.schmizz.sshj.transport.Decoder.received(Decoder.java:195)
net.schmizz.sshj.transport.Reader.run(Reader.java:72)
线程“thread-18”java.lang.NullPointerException中出现异常
在java.io.Reader上。(Reader.java:61)
在java.io.InputStreamReader。(InputStreamReader.java:55)
运行(StreamReader.java:86)
线程“thread-17”java.lang.NullPointerException中的异常
在java.io.Reader上。(Reader.java:61)
在java.io.InputStreamReader。(InputStreamReader.java:55)
运行(StreamReader.java:86)
2012年8月2日12:08:44 PM backup.SSHExec运行
严重:空
net.schmizz.sshj.transport.TransportException:套接字已关闭
net.schmizz.sshj.transport.TransportImpl.init(TransportImpl.java:164)
位于net.schmizz.sshj.SSHClient.onConnect(SSHClient.java:671)
位于net.schmizz.sshj.SocketClient.connect(SocketClient.java:71)
位于net.schmizz.sshj.SocketClient.connect(SocketClient.java:77)
位于net.schmizz.sshj.SocketClient.connect(SocketClient.java:103)
运行(SSHExec.java:73)
位于backup.SSHExec.exec(SSHExec.java:42)
在backup.BackupExec2.copyprovebackup(BackupExec2.java:335)
在backup.BackupExec2.run处(BackupExec2.java:164)
原因:java.net.SocketException:套接字已关闭
位于java.net.SocketInputStream.socketRead0(本机方法)
位于java.net.SocketInputStream.read(SocketInputStream.java:129)
位于java.net.SocketInputStream.read(SocketInputStream.java:182)
net.schmizz.sshj.transport.TransportImpl.init(TransportImpl.java:158)
... 8个以上
线程“thread-23”java.lang.NullPointerException中出现异常
在java.io.Reader上。(Reader.java:61)
在java.io.InputStreamReader。(InputStreamReader.java:55)
运行(StreamReader.java:86)
线程“thread-24”java.lang.NullPointerException中出现异常
在java.io.Reader上。(Reader.java:61)
在java.io.InputStreamReader。(InputStreamReader.java:55)
运行(StreamReader.java:86)

在线程中启动多个SSHExec会话是否有问题?如果不是,我会做错什么?

我意识到我在上面的注释中犯了一个错误。SSHExec是我组装的SSHClient的扩展。这并不能改变我的问题。在执行authPublickey方法之前,似乎一切都很好。这种方法加上其他方法似乎不允许同时启动多个副本。因此,现在似乎不可能使用SSHJ同时创建多个连接。请查看该库。我们使用ssh连接到不同线程中的多台(不同)计算机没有问题。