Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to confirm SFTP file delivery?

Tags:

linux

unix

ssh

sftp

I am sending a file using SFTP and public key for non-root user, looks like the file is sent, but I cant find it on the target folder, maybe due to permission.

sftp> ls
sftp> put /tmp/testx
Uploading /tmp/testx to /folder1/target_folder
/tmp/testx                                 100%    5     0.0KB/s   00:01
sftp> get testx
Couldn't stat remote file: No such file or directory
File "/folder1/target_folder/testx" not found.
sftp> ls
sftp>

here is the -vvv :

debug3: SSH_FXP_REALPATH . -> /folder1
debug3: Looking up /tmp/file_to_send
debug3: Sent message sender_host 4 T:17 I:2
debug3: Wrote 80 bytes for a total of 2653
debug3: Received stat reply T:105 I:2
debug3: Sent message SSH2_FXP_OPEN I:3 P:/folder1/target_directory/file_to_send
debug3: Wrote 112 bytes for a total of 2765
debug3: Sent message SSH2_FXP_WRITE I:4 O:0 S:6206
debug3: Wrote 6288 bytes for a total of 9053
debug3: SSH2_FXP_STATUS 0

target directory

 drw-rw-rw-    1  0   0       target_directory

How can I make sure the file is delivered, without server access ?

like image 270
Nabil Sham Avatar asked Jan 29 '15 20:01

Nabil Sham


People also ask

How do I know if SFTP is successful?

All you can do is to check that there are no errors, when uploading the file. That's all information the SFTP server gives you. With command-line OpenSSH sftp client, you can check its exit code (you need to use the -b switch).

How can I check if a file is well transferred when using SFTP?

The best you could do is run sha1sum via ssh against the remote file and see if that matches the same hash of the local file. A different tool such as scp or rsync may return an error code on transfer failure.

Does SFTP use checksum?

The SFTP protocol does a checksum on each 32KB packet as it is sent, and includes that checksum along with that packet. The receiver gets that packet and decrypts the data, and then verifies the checksum.


1 Answers

All you can do is to check that there are no errors, when uploading the file. That's all information the SFTP server gives you.

With command-line OpenSSH sftp client, you can check its exit code (you need to use the -b switch).

echo "put file.txt" | sftp -b - user@host
if [ $? -eq 0 ]
then
    echo "File uploaded"
else
    echo "File NOT uploaded"
fi

See also How to perform checksums during a SFTP file transfer for data integrity?


It's perfectly possible that the SFTP server does not allow you to download a file that you have just uploaded.

There are two common reasons for such behavior:

  • Public "upload" directory. This is to prevent you from downloading other user's files.
  • There's some process that immediately picks uploaded file for some processing.
like image 117
Martin Prikryl Avatar answered Oct 03 '22 18:10

Martin Prikryl