How to set up drush aliases for a local server for rsync?
To set up to do a drush rsync or drush sql-sync to a remote machine, set up aliases for both sites on the local machine.  The alias for the local site should be as you have shown in your question.  For the remote machine:

$aliases['stage'] = array(
    'uri'  =&gt; 'staging.mysite.com',    
    'root' =&gt; '/home/user/www/mysite',
    'remote-host' =&gt; 'stagingfqdn.myisp.com',
    'remote-user' =&gt; 'wwwadmin',
  );


'remote-machine' should be the fully qualified domain name of the machine that hosts the remote site.  This may or may not be the same as the 'uri' parameter.  You might need to edit /etc/hosts, but only if the remote machine is not resolvable in DNS (unusual).  The 'remote-user' should be the name of the user that owns the files at the Drupal root; usually this is not the user that the web server runs as.

It sometimes makes sense to sql-sync from local to remote -- for example, when bringing a site live for the first time.  Usually, though, you are going to want to rsync your code from local to remote (or check it out from a vcs), and sql-sync your database from remote to local (and never the reverse).  This will insure that you do not overwrite user-generated content. See the features module for one common solution for pushing configuration to the remote machine via copying files.

Edit: Made a typo: said 'remote-machine', but it should have been 'remote-host'.  Corrected above.

Edit 2: Originally I said "rsync your files from local to remote (and never the reverse), but I meant code.  Corrected above.  It is, of course, reasonable and customary to rsync %files from remote to local, as shown in your updated question.