Hi ! I'm implementing some basic client functionality using sshd client. I found a case where I need to implement something of this concept: "gzip /tmp/sample.txt | ssh u...@some.host.com gunzip -c > /tmp/sample.txt"
On my implementation the code (using sshd client) is running an exec channel of the gzip command into stdout. Then I should be able to use the stdout stream and use it to unzip the file locally. Here's a snip of my implementation: // Create the GZIP output stream ByteArrayOutputStream baosGZipped = new ByteArrayOutputStream (); GZIPOutputStream gzOut = new GZIPOutputStream(baosGZipped); // Open the input file FileInputStream src = new FileInputStream(sourceFileName); byte[] buf = new byte[1024]; int len; while ((len = src.read(buf)) > 0) { gzOut.write(buf, 0, len); } src.close(); // Complete the GZIP file gzOut.finish(); gzOut.flush(); gzOut.close(); //create channel ClientChannel channel = session.createExecChannel("gunzip -c >" + destFile); ByteArrayInputStream in = new ByteArrayInputStream(baosGZipped.toByteArray()); channel.setIn(in); ByteArrayOutputStream out = new ByteArrayOutputStream(); channel.setOut(out); ByteArrayOutputStream err = new ByteArrayOutputStream(); channel.setErr(err); //open channel channel.open(); //wait close channel.waitFor(ClientChannel.CLOSED, 0); What I discovered is that this will never end !!! The problem is, that there's a pumpInputStream thread in (org/apache/sshd/client/channel/ChannelSession.java), that will never end until closeFuture.isClosed. Since this does not happen, the unzip in the remote host doesn't end, and the channel will never close. This prevents the client from a proper pipe implementation. There should be a method to properly end this while-loop thus the remote side will be able to finish and close. Can you please open a bug for this issue ? Thanks ! Doron.