I like to pipe tar through ssh.
tar cf - [directory] | ssh [username]@[hostname] tar xf - -C [destination on remote box]
This method gives you lots of options. Since you should have root ssh disabled copying files for multiple user accounts is hard since you are logging into the remote server as a normal user. To get around this you can create a tar file on the remote box that still hold that preserves ownership.
tar cf - [directory] | ssh [username]@[hostname] "cat > output.tar"
For slow connections you can add compression, z for gzip or j for bzip2.
tar cjf - [directory] | ssh [username]@[hostname] "cat > output.tar.bz2"
tar czf - [directory] | ssh [username]@[hostname] "cat > output.tar.gz"
tar czf - [directory] | ssh [username]@[hostname] tar xzf - -C [destination on remote box]