theophilusx/ssh2-sftp-client

fastGet observations

amitkirdatt opened this issue · 5 comments

Node version: v14.19.1
OS: MacOS 12.1
ssh2-sftp-client: 8.0.0

Issue: We were seeing files being corrupted when using fastGet.
Resolution: We needed to adjust the chunkSize specific to the sftp server we are connecting to

We ended up solving the problem - Just sharing our experience:

Code using ssh2-sftp-client

const Client = require('ssh2-sftp-client');

  const config = {
    host: 'xxx.xxxx.xxxx',
    username: 'xxxxxxx',
    password: 'xxxx'
  };

  const remotePath = '/remote-dir/file.txt';
  const localPath = './file.txt';

  const sftp = new Client();
  await sftp.connect(config);

  await sftp.fastGet(remotePath, localPath);
  await sftp.end();

The text file we are downloading is about ~86MB. We noticed that the file was consistently corrupted (data is missing).

To narrow down the issue we decided to whip up a quick test using ssh2

const { Client } = require('ssh2');

  const config = {
    host: 'xxx.xxxx.xxxx',
    username: 'xxxxxxx',
    password: 'xxxx'
  };

  const remotePath = '/remote-dir/file.txt';
  const localPath = './file.txt';

  const conn = new Client();
  conn.on('ready', () => {
    console.log('Client :: ready');
    conn.sftp((err, sftp) => {
      if (err) throw err;
      sftp.fastGet(remotePath, localPath, (err) => {
        if (err) throw err;
        console.log('Done!');
        conn.end();
      });
    });
  }).connect(config);

We noticed the same corruption.

We then fired up the native sftp client in debug mode and noticed that the server rmax value was 32768 (same as the default chunkSize)

sftp -vv username@xxxx.xxxx.xxx
debug2: channel_input_open_confirmation: channel 0: callback done
debug2: channel 0: open confirm rwindow 1073741824 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: subsystem request accepted on channel 0
debug2: Remote version: 3
debug2: Unrecognised server extension "versions"
debug2: Server supports extension "fsync@openssh.com" revision 1
debug2: Server supports extension "posix-rename@openssh.com" revision 1
debug2: Server supports extension "statvfs@openssh.com" revision 2
debug2: Server supports extension "fstatvfs@openssh.com" revision 2
debug2: Server supports extension "hardlink@openssh.com" revision 1

We then added debug logging to ssh2

debug: log => console.log(log)

In the debug we noticed the following:

Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:5440, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)
SFTP: Outbound: Buffered READ
Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:5441, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)
SFTP: Outbound: Buffered READ
Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:5442, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)
SFTP: Outbound: Buffered READ
Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:5443, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)
SFTP: Outbound: Buffered READ
Inbound: CHANNEL_DATA (r:0, 829)
SFTP: Inbound: Received DATA (id:5444, 816)
Inbound: CHANNEL_DATA (r:0, 829)
SFTP: Inbound: Received DATA (id:5445, 816)
Inbound: CHANNEL_DATA (r:0, 829)
SFTP: Inbound: Received DATA (id:5446, 816)
Inbound: CHANNEL_DATA (r:0, 829)
SFTP: Inbound: Received DATA (id:5447, 816)
Inbound: CHANNEL_DATA (r:0, 829)
SFTP: Inbound: Received DATA (id:5448, 816)
Inbound: CHANNEL_DATA (r:0, 829)
SFTP: Inbound: Received DATA (id:5449, 816)
Inbound: CHANNEL_DATA (r:0, 829)
SFTP: Inbound: Received DATA (id:5450, 816)
Inbound: CHANNEL_DATA (r:0, 829)

It looked liked the DATA was being broken up into 2 parts: 1 part was 31952 and the 2nd part was 816, which when added up is 32768. We figured this was causing the issue.

We then specified the chunkSize of 31952 for fastGet.
We didn't see the DATA being broken up into two parts like before (31952 and 816).

Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:2768, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)
SFTP: Outbound: Buffered READ
Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:2769, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)
SFTP: Outbound: Buffered READ
Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:2770, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)
SFTP: Outbound: Buffered READ
Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:2771, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)
SFTP: Outbound: Buffered READ
Inbound: CHANNEL_DATA (r:0, 31965)
SFTP: Inbound: Received DATA (id:2772, 31952)
Outbound: Sending CHANNEL_DATA (r:0, 41)

The files are now downloading correctly.

I am sharing our experience in the hopes that somebody finds it useful.

ssh2-sftp-client updated code that worked for us:

const Client = require('ssh2-sftp-client');

  const config = {
    host: 'xxx.xxxx.xxxx',
    username: 'xxxxxxx',
    password: 'xxxx'
  };

  const remotePath = '/remote-dir/file.txt';
  const localPath = './file.txt';

  const sftp = new Client();
  await sftp.connect(config);

  await sftp.fastGet(remotePath, localPath, {chunkSize: 31952});
  await sftp.end();

ssh2 code:

const { Client } = require('ssh2');

  const config = {
    host: 'xxx.xxxx.xxxx',
    username: 'xxxxxxx',
    password: 'xxxx'
  };

  const remotePath = '/remote-dir/file.txt';
  const localPath = './file.txt';

  const conn = new Client();
  conn.on('ready', () => {
    console.log('Client :: ready');
    conn.sftp((err, sftp) => {
      if (err) throw err;
      sftp.fastGet(remotePath, localPath,  {chunkSize: 31952}, (err) => {
        if (err) throw err;
        console.log('Done!');
        conn.end();
      });
    });
  }).connect(config);

This is great work! Clearly articulated and good methodical research. Thanks for sharing.

Can I ask, since this does indicate an issue with fastGet packet size negotiation in ssh2, would you mind also posting it to the ssh2 project. I suspect this information would prove very useful there.

Finally, I would like to add some of this to the README (in the trouble shooting section). Is that OK with you?

Thank you. I posted it on the ssh2 repo as well: mscdex/ssh2#1166

Please feel free to use it for the README.

Thank you for your work on this repo!

@amitkirdatt Thank you for creating this issue, I was able to replicate. I was very skeptical to believe that fastGet was the culprit.

this hit me pretty hard.
thanks for the testing @amitkirdatt
I think it will be better to make a one-line reference to https://github.com/theophilusx/ssh2-sftp-client?tab=readme-ov-file#issues-with-fastput-and-fastget-methods in the fastGet/fastPut descriptions

Didn't work in case of fastPut, files got corrupted on sftp, tried with multiple chunk sizes.

info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 86) {"timestamp":"2024-08-01T05:21:49.771Z"}
info: SFTP :: SFTP: Outbound: Buffered OPEN {"timestamp":"2024-08-01T05:21:49.772Z"}
info: SFTP :: Inbound: CHANNEL_DATA (r:0, 24) {"timestamp":"2024-08-01T05:21:51.130Z"}
info: SFTP :: SFTP: Inbound: Received HANDLE (id:9) {"timestamp":"2024-08-01T05:21:51.131Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.133Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.134Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:10) {"timestamp":"2024-08-01T05:21:51.134Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.134Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.134Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:11) {"timestamp":"2024-08-01T05:21:51.134Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.134Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:12) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:13) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:14) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.135Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.136Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:15) {"timestamp":"2024-08-01T05:21:51.136Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.136Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.136Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:16) {"timestamp":"2024-08-01T05:21:51.136Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.136Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.137Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:17) {"timestamp":"2024-08-01T05:21:51.137Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.137Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.137Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:18) {"timestamp":"2024-08-01T05:21:51.137Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.137Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.137Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:19) {"timestamp":"2024-08-01T05:21:51.137Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:20) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:21) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:22) {"timestamp":"2024-08-01T05:21:51.138Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:23) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:24) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:25) {"timestamp":"2024-08-01T05:21:51.139Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:26) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:27) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:28) {"timestamp":"2024-08-01T05:21:51.140Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.141Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.141Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:29) {"timestamp":"2024-08-01T05:21:51.141Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.141Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.141Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:30) {"timestamp":"2024-08-01T05:21:51.141Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.141Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.141Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:31) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:32) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:33) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:34) {"timestamp":"2024-08-01T05:21:51.142Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:35) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:36) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:37) {"timestamp":"2024-08-01T05:21:51.143Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:38) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:39) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:40) {"timestamp":"2024-08-01T05:21:51.144Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.145Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.145Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:41) {"timestamp":"2024-08-01T05:21:51.145Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.145Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.145Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:42) {"timestamp":"2024-08-01T05:21:51.145Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.145Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.145Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:43) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:44) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:45) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.146Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:46) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:47) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:48) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.147Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:49) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:50) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:51) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.148Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:52) {"timestamp":"2024-08-01T05:21:51.149Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.149Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.149Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:53) {"timestamp":"2024-08-01T05:21:51.149Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.149Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.149Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:54) {"timestamp":"2024-08-01T05:21:51.149Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.150Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.150Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:55) {"timestamp":"2024-08-01T05:21:51.150Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.150Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.150Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:56) {"timestamp":"2024-08-01T05:21:51.150Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.150Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.150Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:57) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:58) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:59) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.151Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:60) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:61) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:62) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.152Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:63) {"timestamp":"2024-08-01T05:21:51.153Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.153Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.153Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:64) {"timestamp":"2024-08-01T05:21:51.153Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.153Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.153Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:65) {"timestamp":"2024-08-01T05:21:51.153Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.153Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.154Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:66) {"timestamp":"2024-08-01T05:21:51.154Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.154Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.154Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:67) {"timestamp":"2024-08-01T05:21:51.154Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.155Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.155Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:68) {"timestamp":"2024-08-01T05:21:51.155Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.155Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.155Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:69) {"timestamp":"2024-08-01T05:21:51.155Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.155Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.156Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:70) {"timestamp":"2024-08-01T05:21:51.156Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.156Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.156Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:71) {"timestamp":"2024-08-01T05:21:51.156Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.156Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.156Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:72) {"timestamp":"2024-08-01T05:21:51.156Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 32648) {"timestamp":"2024-08-01T05:21:51.157Z"}
info: SFTP :: Outbound: Sending CHANNEL_DATA (r:0, 156) {"timestamp":"2024-08-01T05:21:51.157Z"}
info: SFTP :: SFTP: Outbound: Sent WRITE (id:73) {"timestamp":"2024-08-01T05:21:51.157Z"}
info: SFTP :: Inbound: CHANNEL_DATA (r:0, 53) {"timestamp":"2024-08-01T05:21:51.254Z"}
info: SFTP :: SFTP: Inbound: Received STATUS (id:10, 0, "The write completed successfully") {"timestamp":"2024-08-01T05:21:51.255Z"}