Skip to content

exit-status returns non-deterministic #114

Closed
@muzy

Description

@muzy

Hi,

I just discovered that the exit-status is not always set (in net.schmizz.sshj.connection.channel.direct) , even though the according packets are send by the ssh host. A first evaluation of this points to the StreamCopier (net.schmizz.sshj.StreamCopier) because depending on the call of the copy() function, the exit-status is available or not (see attached logfiles).

Logfile when exit-status is fetched:

DEBUG ConnectionImpl:68 - Attaching `session` channel (#3)
TRACE Encoder:100 - Encoding packet #18: 5a 00 00 00 07 73 65 73 73 69 6f 6e 00 00 00 03 00 20 00 00 00 00 80 00
DEBUG Promise:164 - Awaiting <<chan#3 / open>>
TRACE Decoder:125 - Received packet #25: 5b 00 00 00 03 00 00 00 00 00 00 00 00 00 00 80 00
TRACE TransportImpl:471 - Received packet CHANNEL_OPEN_CONFIRMATION
DEBUG SessionChannel:125 - Initialized - < session channel: id=3, recipient=0, localWin=[winSize=2097152], remoteWin=[winSize=0] >
DEBUG Promise:78 - Setting <<chan#3 / open>> to `SOME`
INFO  SessionChannel:120 - Will request to exec `test -x /tmp/nmon`
DEBUG SessionChannel:374 - Sending channel request for `exec`
TRACE Encoder:100 - Encoding packet #19: 62 00 00 00 00 00 00 00 04 65 78 65 63 01 00 00 00 11 74 65 73 74 20 2d 78 20 2f 74 6d 70 2f 6e 6d 6f 6e
DEBUG Promise:164 - Awaiting <<chan#3 / chanreq for exec>>
TRACE Decoder:125 - Received packet #26: 5d 00 00 00 03 00 20 00 00
TRACE TransportImpl:471 - Received packet CHANNEL_WINDOW_ADJUST
DEBUG SessionChannel:328 - Received window adjustment for 2097152 bytes
DEBUG Window$Remote:41 - Increasing by 2097152 up to 2097152
TRACE Decoder:125 - Received packet #27: 63 00 00 00 03
TRACE TransportImpl:471 - Received packet CHANNEL_SUCCESS
DEBUG Promise:78 - Setting <<chan#3 / chanreq for exec>> to `SOME`
DEBUG SSHWrapper:241 - < session channel: id=3, recipient=0, localWin=[winSize=2097152], remoteWin=[winSize=2097152] >
TRACE Decoder:125 - Received packet #28: 60 00 00 00 03
TRACE TransportImpl:471 - Received packet CHANNEL_EOF
DEBUG SessionChannel:410 - Got EOF
DEBUG StreamCopier:139 - 0.0 KiB transferred  in 0.038 seconds (0.0 KiB/s)
TRACE Decoder:125 - Received packet #29: 62 00 00 00 03 00 00 00 0b 65 78 69 74 2d 73 74 61 74 75 73 00 00 00 00 01
TRACE TransportImpl:471 - Received packet CHANNEL_REQUEST
DEBUG SessionChannel:316 - Got chan request for `exit-status`
TRACE Decoder:125 - Received packet #30: 61 00 00 00 03
TRACE TransportImpl:471 - Received packet CHANNEL_CLOSE
DEBUG SessionChannel:223 - Got close
DEBUG SessionChannel:427 - Sending EOF
TRACE Encoder:100 - Encoding packet #20: 60 00 00 00 00
DEBUG StreamCopier:139 - 0.0 KiB transferred  in 0.0 seconds (NaN KiB/s)
DEBUG SessionChannel:289 - Sending close
TRACE Encoder:100 - Encoding packet #21: 61 00 00 00 00
DEBUG Promise:164 - Awaiting <<chan#3 / close>>
DEBUG ConnectionImpl:84 - Forgetting `session` channel (#3)
DEBUG Promise:78 - Setting <<chan#3 / close>> to `SOME`

Logfile when the exit-status remains "null":

DEBUG ConnectionImpl:68 - Attaching `session` channel (#4)
TRACE Encoder:100 - Encoding packet #22: 5a 00 00 00 07 73 65 73 73 69 6f 6e 00 00 00 04 00 20 00 00 00 00 80 00
DEBUG Promise:164 - Awaiting <<chan#4 / open>>
TRACE Decoder:125 - Received packet #31: 5b 00 00 00 04 00 00 00 00 00 00 00 00 00 00 80 00
TRACE TransportImpl:471 - Received packet CHANNEL_OPEN_CONFIRMATION
DEBUG SessionChannel:125 - Initialized - < session channel: id=4, recipient=0, localWin=[winSize=2097152], remoteWin=[winSize=0] >
DEBUG Promise:78 - Setting <<chan#4 / open>> to `SOME`
INFO  SessionChannel:120 - Will request to exec `test -x /tmp/nmon`
DEBUG SessionChannel:374 - Sending channel request for `exec`
TRACE Encoder:100 - Encoding packet #23: 62 00 00 00 00 00 00 00 04 65 78 65 63 01 00 00 00 11 74 65 73 74 20 2d 78 20 2f 74 6d 70 2f 6e 6d 6f 6e
DEBUG Promise:164 - Awaiting <<chan#4 / chanreq for exec>>
TRACE Decoder:125 - Received packet #32: 5d 00 00 00 04 00 20 00 00
TRACE TransportImpl:471 - Received packet CHANNEL_WINDOW_ADJUST
DEBUG SessionChannel:328 - Received window adjustment for 2097152 bytes
DEBUG Window$Remote:41 - Increasing by 2097152 up to 2097152
TRACE Decoder:125 - Received packet #33: 63 00 00 00 04
TRACE TransportImpl:471 - Received packet CHANNEL_SUCCESS
DEBUG Promise:78 - Setting <<chan#4 / chanreq for exec>> to `SOME`
DEBUG SSHWrapper:241 - < session channel: id=4, recipient=0, localWin=[winSize=2097152], remoteWin=[winSize=2097152] >
TRACE Decoder:125 - Received packet #34: 60 00 00 00 04
TRACE TransportImpl:471 - Received packet CHANNEL_EOF
DEBUG SessionChannel:410 - Got EOF
DEBUG StreamCopier:139 - 0.0 KiB transferred  in 0.039 seconds (0.0 KiB/s)
DEBUG StreamCopier:139 - 0.0 KiB transferred  in 0.0 seconds (NaN KiB/s)
TRACE Decoder:125 - Received packet #35: 62 00 00 00 04 00 00 00 0b 65 78 69 74 2d 73 74 61 74 75 73 00 00 00 00 01
TRACE TransportImpl:471 - Received packet CHANNEL_REQUEST
DEBUG SessionChannel:316 - Got chan request for `exit-status`
TRACE Decoder:125 - Received packet #36: 61 00 00 00 04
TRACE TransportImpl:471 - Received packet CHANNEL_CLOSE
DEBUG SessionChannel:223 - Got close
DEBUG SessionChannel:427 - Sending EOF
TRACE Encoder:100 - Encoding packet #24: 60 00 00 00 00
DEBUG SessionChannel:289 - Sending close
TRACE Encoder:100 - Encoding packet #25: 61 00 00 00 00
DEBUG Promise:164 - Awaiting <<chan#4 / close>>
DEBUG ConnectionImpl:84 - Forgetting `session` channel (#4)
DEBUG Promise:78 - Setting <<chan#4 / close>> to `SOME`

Even though the SSH related RFC (http://www.ietf.org/rfc/rfc4254.txt) only recommends to return the exit-status, an accurate exit-status would be great instead of an null value (when the host has send the packet).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions