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"}