If you need to jump through one (or more) proxy servers, OpenSSH v7.3 onward supports a -J.
Considering A → B → C, on hostA, just:
tar cf - file1 file_n | pv | ssh -C -J userB@hostB:portB userB@hostC -p portC 'tar xvf - -C hostC_destination_folder'
- Use as many hops as you want with ssh's
-Joption. - Omit the tar's remote
-Cto leave the files on home folder. - Send any files at once (text or binary).
- Increase speed by compressing the stream with ssh's
-C(or tar's-z). Particularly useful if the data is plain text (uncompressed). pvmonitor the progress of data through a pipe. An alternative could beprogress.
Inspired on Florian Fida and Dan Garthwaite's answers.
Here's how to do it with Midnight Commander.
Related project: Magic Wormhole: Get things from one computer to another, safely.