You need sudo in order to put the files in the directory that is owned by www-data. If you want to avoid sudo, then you will need to set up www-data as a real login user with a password, and their home directory set to /var/www. Then you can move individual files with scp and not have to log in with ssh.

This is just a straightforward file permissions error. The user with which you are connecting with cyberduck doesn't have permissions to do the file operation.

It is a good idea to try doing a similar operation over SCP at the commandline to double-check cyberduck isn't playing tricks on you. Here you'll see a quick 'permission denied' error.

Make sure you're connecting as www-data if that's the user who owns the file... although it's possibly a bit unusual to connect as this user. Alternatives? Connect as 'root'. Try to write files to some different destination directory e.g. your user home directory or /tmp This maybe an adequate workaround, if you can then move files after transferring them, but do this test anyway as a sanity check.

Personally I hit this error with one particular file because I'd accidentally caused root to become the owner of the file itself (not the directory it was in), but your -R commands should take care of that.

Another gotcha I remember hitting a while back: Do you have "SELinux" enabled?