Why drush "assume yes" -y option do not work for some commands
The solution is to pass all global options like -y or -n before drush command:

drush -y rsync @staging:sites/all/themes @production:sites/all/themes


This allows you to pass options to a shell command run with drush without getting in conflict with drush options:

drush [global options] command [command options]


This will pass [global options] to drush, and [command options] to a shell command.

Take a habit of passing -y and other global options right after you type drush.

Run drush topic docs-strict-options to get a help on that case.