rsync from one remote to another

You should be able to set up an SSH tunnel from A->B and from A-C, and then rsync directly from B->C by going across that tunnel.

It's going to be a bit complicated, but basically you do the following:

  1. Set up an rsync daemon on a high port (say 20000) on B
  2. Set up a LocalForward A:20000 to B:20000 with ssh
  3. Set up a RemoteForward from C:20000 to A:20000 with ssh
  4. On C, rsync -av /path rsync://localhost:20000/path

Bear in mind that all this traffic will be going both in and out the network on A and being encrypted, so it will probably be pretty slow. it might be worth seeing if B is actually firewalled from C, you might be able to run the rsync server on a high port and connect directly.