This issue is related to
The change implemented in that issue causes the EOF to be propagated to the shell, but because the inverted shell has to pump between the SSH streams and the Process streams, the EOF never makes it to the OS process.
The cause is that ChannelSession.handleEof() calls shellIn.close(), but shellIn is not directly attached to the process. In fact it's InvertedShellWrapper.pumpStream() that copies from the shellIn to the process, and that doesn't handle EOF.
I can't see a obvious fix.
I've put a bit of a hack in that does what I need (and proves that this problem is as described), but it really is a hack...