Description
I'm encountering an issue with the Alpakka library which uses sshj for the SFTP implementation. I started encountering net.schmizz.sshj.sftp.SFTPException: EOF while reading packet
errors on very specific XML files where files are embedded (EDI use-case).
I've created some tests where I specifically use the sshj library for the SFTP actions and am able to replicate the issue with a locally hosted SFTP server and the file.
Due to the sensitive nature of the documents i am not able to share those, I have not been able to manually reproduce a document where the issue occurs.
This is the test i've created (Scala code) where I've tested our abstracted client, the Alpakka client and then the sshj library.
I have a workaround in the test Should upload file with sshj
where i create a temporary file on the system to then use the put
function (I suppose it does a full copy instead of a streamed write).
class SftpTest extends TestKit(ActorSystem("TestSystem")) with AnyFunSuiteLike with Logging {
test("Should be able to upload a larger document") {
val f = new File(getClass.getResource("/sftp/test-xml.xml").toURI)
val cfg = FtpConfig(
"nymus",
"test",
"localhost",
FtpType.SFTP,
2222
)
val bytes = Files.readAllBytes(f.toPath)
val client = new AlpakkaFtpClient(system)
val request = FtpUploadRequest(
bytes = bytes, remoteFilePath = "/test.xml", ftpConfig = cfg, temporaryExtension = Some(".temp")
)
val output = Await.result(client.upload(request), Duration.Inf)
output shouldBe Success(Done)
}
test("Should upload file") {
val f = new File(getClass.getResource("/sftp/test-xml.xml").toURI)
val bytes = Files.readAllBytes(f.toPath)
val remotePath = "/test.xml"
val ftpSettings = SftpSettings
.create(InetAddress.getByName("localhost"))
.withPort(2222)
.withCredentials(FtpCredentials.create("nymus", "test"))
.withStrictHostKeyChecking(false)
.withMaxUnconfirmedReads(64)
val s = Sftp.toPath(remotePath, ftpSettings, false)
val out = Await.result(Source.single(ByteString.fromArray(bytes))
.runWith(s), Duration.Inf)
out.status shouldBe Success(Done)
}
test("Should upload file with sshj") {
val out = Try {
val f = new File(getClass.getResource("/sftp/test-xml.xml").toURI)
val bytes = Files.readAllBytes(f.toPath)
val remotePath = "/test.xml"
val ssh = new SSHClient()
ssh.addHostKeyVerifier(new PromiscuousVerifier())
ssh.connect(InetAddress.getByName("localhost"), 2222)
ssh.authPassword("nymus", "test")
val sftp = ssh.newSFTPClient()
val tempDir = new File(System.getProperty("java.io.tmpdir"));
val tempFile = File.createTempFile(remotePath.split("/").last, ".tmp", tempDir);
val bw = new FileOutputStream(tempFile);
bw.write(bytes);
bw.close();
// try to remove, don't care about failure here, either remove when exist or do not do anything
Try {
sftp.rm(remotePath)
}
sftp.put(tempFile.getAbsolutePath, remotePath)
tempFile.delete()
sftp.close()
ssh.disconnect()
Done
}
out shouldBe Success(Done)
}
test("Should upload file with sshj streamed") {
val out = Try {
val f = new File(getClass.getResource("/sftp/test-xml.xml").toURI)
val bytes = Files.readAllBytes(f.toPath)
val remotePath = "/test.xml"
val ssh = new SSHClient()
ssh.addHostKeyVerifier(new PromiscuousVerifier())
ssh.connect(InetAddress.getByName("localhost"), 2222)
ssh.authPassword("nymus", "test")
val sftp = ssh.newSFTPClient()
val remoteFile = sftp.open(remotePath, java.util.EnumSet.of(WRITE, CREAT, TRUNC))
val os: remoteFile.RemoteFileOutputStream = new remoteFile.RemoteFileOutputStream()
os.write(bytes,0, bytes.length)
os.close()
sftp.close()
ssh.disconnect()
}
out shouldBe Success(Done)
}
test("should be able to read a pdf file") {
val out = Try{
val f = new File(getClass.getResource("/sftp/application-4.pdf").toURI)
val bytes = Files.readAllBytes(f.toPath)
val tempDir = new File(System.getProperty("java.io.tmpdir"));
val tempFile = File.createTempFile("test.pdf", ".tmp", tempDir);
val b: FileOutputStream = new FileOutputStream(tempFile);
b.write(bytes)
b.close()
Done
}
out shouldBe Success(Done)
}
test("should be able to read a different pdf file") {
val out = Try{
val f = new File(getClass.getResource("/sftp/application-5.pdf").toURI)
val bytes = Files.readAllBytes(f.toPath)
val tempDir = new File(System.getProperty("java.io.tmpdir"));
val tempFile = File.createTempFile("test.pdf", ".tmp", tempDir);
val b: FileOutputStream = new FileOutputStream(tempFile);
b.write(bytes)
b.close()
Done
}
out shouldBe Success(Done)
}
test("should be able to read a image file") {
val out = Try{
val f = new File(getClass.getResource("/sftp/image.jpg").toURI)
val bytes = Files.readAllBytes(f.toPath)
val tempDir = new File(System.getProperty("java.io.tmpdir"));
val tempFile = File.createTempFile("test.jpg", ".tmp", tempDir);
val b: FileOutputStream = new FileOutputStream(tempFile);
b.write(bytes)
b.close()
Done
}
out shouldBe Success(Done)
}
}
Below is the output of the test Should upload file with sshj streamed
which fails with our specific XML document with embedded PDF's and image.
2:00:21.207 [TestSystem-akka.actor.default-dispatcher-5] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
12:00:21.592 [ScalaTest-run-running-SftpTest] INFO n.s.sshj.transport.random.JCERandom - Creating new SecureRandom.
12:00:21.593 [ScalaTest-run-running-SftpTest] DEBUG n.s.sshj.transport.random.JCERandom - Random creation took 1 ms
12:00:21.752 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.sshj.DefaultConfig - Available Ciphers [[email protected], aes128-cbc, aes128-ctr, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, [email protected], [email protected], blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, 3des-cbc, 3des-ctr, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr, twofish-cbc, arcfour, arcfour128, arcfour256]
12:00:21.757 [ScalaTest-run-running-SftpTest] INFO n.s.sshj.transport.TransportImpl - Client identity string: SSH-2.0-SSHJ_0.39.0
12:00:21.804 [ScalaTest-run-running-SftpTest] INFO n.s.sshj.transport.TransportImpl - Server identity string: SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u3
12:00:21.805 [ScalaTest-run-running-SftpTest] DEBUG n.s.sshj.transport.KeyExchanger - Initiating key exchange
12:00:21.805 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Clearing <<kex done>>
12:00:21.805 [ScalaTest-run-running-SftpTest] DEBUG n.s.sshj.transport.KeyExchanger - Sending SSH_MSG_KEXINIT
12:00:21.806 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Setting <<kexinit sent>> to `SOME`
12:00:21.806 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Awaiting <<kex done>>
12:00:21.810 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.KeyExchanger - Received SSH_MSG_KEXINIT
12:00:21.810 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.KeyExchanger - Enabling strict key exchange extension
12:00:21.810 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.KeyExchanger - Negotiated algorithms: [ kex=curve25519-sha256; sig=ssh-ed25519; [email protected]; [email protected]; c2sMAC=hmac-sha1; s2cMAC=hmac-sha1; c2sComp=none; s2cComp=none; ]
12:00:21.827 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.transport.kex.Curve25519SHA256 - Sending SSH_MSG_KEXDH_INIT
12:00:21.834 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.KeyExchanger - Received kex followup data
12:00:21.834 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.transport.kex.Curve25519SHA256 - Received SSH_MSG_KEXDH_REPLY
12:00:21.835 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG net.schmizz.sshj.common.KeyType - Key algo: ssh-ed25519, Key curve: 25519, Key Len: 32
p: [65, -70, 47, -88, -117, 12, -64, -25, 102, -38, 41, -45, 37, -66, 32, -22, -90, -108, 120, 23, 28, -77, 99, -87, 109, 4, 98, -73, 25, 75, 6, 76]
12:00:21.849 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.KeyExchanger - Trying to verify host key with net.schmizz.sshj.transport.verification.PromiscuousVerifier@25d9ee0
12:00:21.849 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.KeyExchanger - Sending SSH_MSG_NEWKEYS
12:00:21.850 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.KeyExchanger - Received SSH_MSG_NEWKEYS
12:00:21.850 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG net.schmizz.concurrent.Promise - Clearing <<kexinit sent>>
12:00:21.850 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG net.schmizz.concurrent.Promise - Setting <<kex done>> to `SOME`
12:00:21.850 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.sshj.SSHClient - Key exchange took 0.046 seconds
12:00:21.850 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.TransportImpl - Received SSH_MSG_EXT_INFO
12:00:21.852 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Clearing <<service accept>>
12:00:21.852 [ScalaTest-run-running-SftpTest] DEBUG n.s.sshj.transport.TransportImpl - Sending SSH_MSG_SERVICE_REQUEST for ssh-userauth
12:00:21.852 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Awaiting <<service accept>>
12:00:21.852 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.TransportImpl - Setting active service to ssh-userauth
12:00:21.852 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG net.schmizz.concurrent.Promise - Setting <<service accept>> to `SOME`
12:00:21.853 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Clearing <<authenticated>>
12:00:21.853 [ScalaTest-run-running-SftpTest] DEBUG n.schmizz.sshj.userauth.UserAuthImpl - Trying `password` auth...
12:00:21.853 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.userauth.method.AuthPassword - Requesting password for [AccountResource] nymus@localhost
12:00:21.853 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Awaiting <<authenticated>>
12:00:21.895 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.transport.TransportImpl - Setting active service to ssh-connection
12:00:21.895 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG net.schmizz.concurrent.Promise - Setting <<authenticated>> to `true`
12:00:21.895 [ScalaTest-run-running-SftpTest] DEBUG n.schmizz.sshj.userauth.UserAuthImpl - `password` auth successful
12:00:21.899 [ScalaTest-run-running-SftpTest] DEBUG n.s.sshj.connection.ConnectionImpl - Attaching `session` channel (#0)
12:00:21.899 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Awaiting <<chan#0 / open>>
12:00:21.908 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.connection.ConnectionImpl - Received GLOBAL_REQUEST `[email protected]`; want reply: false
12:00:21.909 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.c.direct.SessionChannel - Initialized - < session channel: id=0, recipient=0, localWin=[winSize=2097152], remoteWin=[winSize=0] >
12:00:21.909 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG net.schmizz.concurrent.Promise - Setting <<chan#0 / open>> to `SOME`
12:00:21.909 [ScalaTest-run-running-SftpTest] INFO n.s.s.c.c.direct.SessionChannel - Will request `sftp` subsystem
12:00:21.909 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.c.direct.SessionChannel - Sending channel request for `subsystem`
12:00:21.909 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Awaiting <<chan#0 / chanreq for subsystem>>
12:00:21.911 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.c.direct.SessionChannel - Received window adjustment for 2097152 bytes
12:00:21.911 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.channel.Window$Remote - Increasing by 2097152 up to 2097152
12:00:21.911 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG net.schmizz.concurrent.Promise - Setting <<chan#0 / chanreq for subsystem>> to `SOME`
12:00:21.912 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 9 down to 2097143
12:00:22.165 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.channel.Window$Local - Consuming by 183 down to 2096969
12:00:22.165 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.sshj.sftp.SFTPEngine - Server version 3
12:00:22.167 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.sshj.sftp.SFTPClient - Opening `/test.xml`
12:00:22.167 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.sshj.sftp.SFTPEngine - Sending Request{1;OPEN}
12:00:22.167 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 30 down to 2097113
12:00:22.168 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.concurrent.Promise - Awaiting <<sftp / 1>>
12:00:22.168 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.channel.Window$Local - Consuming by 17 down to 2096952
12:00:22.169 [sshj-PacketReader-localhost/127.0.0.1:2222-1740481221911] DEBUG net.schmizz.sshj.sftp.PacketReader - Received HANDLE packet
12:00:22.169 [sshj-PacketReader-localhost/127.0.0.1:2222-1740481221911] DEBUG net.schmizz.concurrent.Promise - Setting <<sftp / 1>> to `Buffer [rpos=5, wpos=13, size=13]`
12:00:22.170 [ScalaTest-run-running-SftpTest] DEBUG net.schmizz.sshj.sftp.SFTPEngine - Sending Request{2;WRITE}
12:00:22.174 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 2064345
12:00:22.176 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 2031577
12:00:22.177 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1998809
12:00:22.177 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.c.direct.SessionChannel - Got EOF
12:00:22.177 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.c.direct.SessionChannel - Got chan request for `exit-status`
12:00:22.177 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.c.direct.SessionChannel - Got close
12:00:22.178 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1966041
12:00:22.178 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1933273
12:00:22.179 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1900505
12:00:22.180 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1867737
12:00:22.181 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1834969
12:00:22.182 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1802201
12:00:22.183 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1769433
12:00:22.184 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1736665
12:00:22.184 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1703897
12:00:22.185 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1671129
12:00:22.186 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1638361
12:00:22.187 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1605593
12:00:22.188 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1572825
12:00:22.188 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1540057
12:00:22.189 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1507289
12:00:22.189 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1474521
12:00:22.190 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1441753
12:00:22.190 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1408985
12:00:22.191 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1376217
12:00:22.191 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1343449
12:00:22.192 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1310681
12:00:22.192 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1277913
12:00:22.193 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1245145
12:00:22.193 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1212377
12:00:22.194 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1179609
12:00:22.194 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1146841
12:00:22.194 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1114073
12:00:22.195 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1081305
12:00:22.195 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1048537
12:00:22.195 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 1015769
12:00:22.195 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 983001
12:00:22.196 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 950233
12:00:22.196 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 917465
12:00:22.196 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 884697
12:00:22.196 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 851929
12:00:22.196 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 819161
12:00:22.196 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 786393
12:00:22.196 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 753625
12:00:22.197 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 720857
12:00:22.197 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 688089
12:00:22.197 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 655321
12:00:22.197 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 622553
12:00:22.197 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 589785
12:00:22.197 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 557017
12:00:22.198 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 524249
12:00:22.198 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 491481
12:00:22.198 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 458713
12:00:22.198 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 425945
12:00:22.198 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 393177
12:00:22.198 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 32768 down to 360409
12:00:22.199 [ScalaTest-run-running-SftpTest] DEBUG n.s.s.c.channel.Window$Remote - Consuming by 27462 down to 332947
12:00:22.199 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.s.c.c.direct.SessionChannel - Sending close
12:00:22.199 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG n.s.sshj.connection.ConnectionImpl - Forgetting `session` channel (#0)
12:00:22.199 [sshj-Reader-localhost/127.0.0.1:2222-1740481221804] DEBUG net.schmizz.concurrent.Promise - Setting <<chan#0 / close>> to `SOME`
If you need more information let me know!
Thanks in advance!