Java SSH命令执行失败,出现异常-";net.schmizz.sshj.connection.ConnectionException:引发连接重置异常;

Java SSH命令执行失败,出现异常-";net.schmizz.sshj.connection.ConnectionException:引发连接重置异常;,java,networking,ssh,socketexception,sshj,Java,Networking,Ssh,Socketexception,Sshj,当通过SSH连接执行命令时,通常命令执行失败并出现异常-“net.schmizz.sshj.connection.ConnectionException:引发连接重置异常” 问题描述: 我使用net.schmizz.sshj.SSHClient创建了到主机的SSH连接实例。我使用这个SSH连接执行一系列命令,最后关闭连接 在检查java代码执行日志时,我经常可以看到错误 2018-04-12T06:15:23.288Z ERROR n.s.s.t.TransportImpl [die:589]

当通过SSH连接执行命令时,通常命令执行失败并出现异常-“net.schmizz.sshj.connection.ConnectionException:引发连接重置异常”

问题描述:

我使用net.schmizz.sshj.SSHClient创建了到主机的SSH连接实例。我使用这个SSH连接执行一系列命令,最后关闭连接

在检查java代码执行日志时,我经常可以看到错误

2018-04-12T06:15:23.288Z ERROR n.s.s.t.TransportImpl [die:589] [reader] - Dying because - {}
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at net.schmizz.sshj.transport.Reader.run(Reader.java:50)
2018-04-12T06:15:23.288Z INFO  n.s.s.t.TransportImpl [notifyDisconnect:182] [reader] - Disconnected - UNKNOWN
java代码执行将继续运行

但是,当使用SSH连接执行命令时,如果在此期间出现java.net.SocketException:connection reset异常,我的java代码执行将终止

 2018-04-11T12:02:51.755Z INFO  c.v.v.u.SSHUtil [executeRemoteSSHCommand:861] [main] - Successfully executed 'tar -C /usr/local/ -zxvf /usr/local/VMware-GuestSDK-10.2.0-8225092.tar.gz --no-same-owner' command on remote ssh host
    2018-04-11T12:03:18.121Z ERROR n.s.s.t.TransportImpl [die:589] [reader] - Dying because - {}
    java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(Unknown Source)
        at java.net.SocketInputStream.read(Unknown Source)
        at net.schmizz.sshj.transport.Reader.run(Reader.java:50)
    2018-04-11T12:03:18.123Z INFO  n.s.s.t.TransportImpl [notifyDisconnect:182] [reader] - Disconnected - UNKNOWN
    2018-04-11T12:03:18.127Z ERROR n.s.c.Promise [tryRetrieve:175] [main] - <<chan#6 / open>> woke to: net.schmizz.sshj.connection.ConnectionException: Connection reset
    2018-04-11T12:03:18.130Z ERROR c.v.v.e.OutcomePrinter [afterInvocation:40] [main] - exception thrown 
    net.schmizz.sshj.connection.ConnectionException: Connection reset
        at net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:32)
        at net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:26)
        at net.schmizz.concurrent.Promise.deliverError(Promise.java:96)
        at net.schmizz.concurrent.Event.deliverError(Event.java:74)
        at net.schmizz.concurrent.ErrorDeliveryUtil.alertEvents(ErrorDeliveryUtil.java:34)
        at net.schmizz.sshj.connection.channel.AbstractChannel.notifyError(AbstractChannel.java:226)
        at net.schmizz.sshj.connection.channel.direct.SessionChannel.notifyError(SessionChannel.java:224)
        at net.schmizz.sshj.common.ErrorNotifiable$Util.alertAll(ErrorNotifiable.java:35)
        at net.schmizz.sshj.connection.ConnectionImpl.notifyError(ConnectionImpl.java:258)
        at net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:597)
        at net.schmizz.sshj.transport.Reader.run(Reader.java:68)
    Caused by: net.schmizz.sshj.common.SSHException: Connection reset
        at net.schmizz.sshj.common.SSHException$1.chain(SSHException.java:36)
        at net.schmizz.sshj.common.SSHException$1.chain(SSHException.java:29)
        at net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:591)
        ... 1 common frames omitted
    Caused by: java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(Unknown Source)
        at java.net.SocketInputStream.read(Unknown Source)
        at net.schmizz.sshj.transport.Reader.run(Reader.java:50)
    2018-04-11T12:03:18.131Z INFO  c.v.v.e.OutcomePrinter [afterInvocation:47] [main] - OUTCOME:FAIL
2018-04-11T12:02:51.755Z INFO c.v.v.u.SSHUtil[executeRemotessCommand:861][main]-在远程ssh主机上成功执行了'tar-c/usr/local/-zxvf/usr/local/VMware-GuestSDK-10.2.0-8225092.tar.gz--无相同所有者'命令
2018-04-11T12:03:18.121Z错误n.s.s.t.TransportImpl[die:589][reader]-因为{}而死亡
java.net.SocketException:连接重置
位于java.net.SocketInputStream.read(未知源)
位于java.net.SocketInputStream.read(未知源)
net.schmizz.sshj.transport.Reader.run(Reader.java:50)
2018-04-11T12:03:18.123Z信息n.s.s.t.TransportImpl[notifyDisconnect:182][reader]-已断开连接-未知
2018-04-11T12:03:18.127Z错误n.s.c.Promise[tryRetrieve:175][main]-唤醒到:net.schmizz.sshj.connection.ConnectionException:连接重置
2018-04-11T12:03:18.130Z错误c.v.v.e.OutcomePrinter[调用后:40][main]-引发异常
net.schmizz.sshj.connection.ConnectionException:连接重置
net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:32)
net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:26)
net.schmizz.concurrent.Promise.deliverError(Promise.java:96)
net.schmizz.concurrent.Event.deliverError(Event.java:74)
位于net.schmizz.concurrent.ErrorDeliveryUtil.alertEvents(ErrorDeliveryUtil.java:34)
位于net.schmizz.sshj.connection.channel.AbstractChannel.notifyError(AbstractChannel.java:226)
net.schmizz.sshj.connection.channel.direct.SessionChannel.notifyError(SessionChannel.java:224)
位于net.schmizz.sshj.common.ErrorNotifiable$Util.alertAll(ErrorNotifiable.java:35)
位于net.schmizz.sshj.connection.ConnectionImpl.notifyError(ConnectionImpl.java:258)
net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:597)
net.schmizz.sshj.transport.Reader.run(Reader.java:68)
原因:net.schmizz.sshj.common.SSHException:连接重置
位于net.schmizz.sshj.common.SSHException$1.chain(SSHException.java:36)
位于net.schmizz.sshj.common.SSHException$1.chain(SSHException.java:29)
net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:591)
... 1省略了公共框架
原因:java.net.SocketException:连接重置
位于java.net.SocketInputStream.read(未知源)
位于java.net.SocketInputStream.read(未知源)
net.schmizz.sshj.transport.Reader.run(Reader.java:50)
2018-04-11T12:03:18.131Z信息c.v.v.e.结果打印机[调用后:47][main]-结果:失败
问题:

SSH连接通常会断开连接并重新连接,但当我通过此SSH连接执行命令时,如果发生断开连接,它将不会重新连接,而会引发net.schmizz.sshj.connection.ConnectionException:连接重置异常

我的查询:

如何从我的Java代码中克服ssh断开连接的问题,特别是在通过ssh连接执行命令时

谢谢。

来自javadoc: SocketException:抛出以指示创建或访问套接字时出错

所以,基本上你没有办法防止这种情况发生,只要它不是你的系统造成的,例如连接中断。通常,此错误是因为服务器出于任何原因正在断开客户端的连接


您可以做的是,如果抛出错误,您只需重新连接客户端。或者,如果这是一个用户操作的客户端,您可以监视并行线程中的连接,并在用户知道连接丢失之前让客户端重新连接。

可能是因为ssh主机验证。首先尝试从该服务器进行ssh,以便将其添加到已知主机。

连接重置通常意味着远程服务器断开了TCP会话。您需要在远程系统上对此进行故障排除,以找出发生这种情况的原因。