3

コマンドが SSH 接続を介して実行されると、多くの場合、コマンドの実行は例外 - "net.schmizz.sshj.connection.ConnectionException: Connection reset Exception is throw" で失敗します。

問題の説明:

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 Exception が来ると、私の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

問題:

多くの場合、SSH 接続は切断されて再接続されますが、この SSH 接続を介してコマンドを実行すると、その間に切断が発生すると、代わりに再接続されず、net.schmizz.sshj.connection.ConnectionException: Connection reset Exception がスローされます。

私のクエリ:

特に SSH 接続を介してコマンドを実行しているときに、Java コードからこの ssh 切断の問題を解決するにはどうすればよいですか?

ありがとう。

4

2 に答える 2