Have Drush on your local machine, but use a shared hosting service on your remote machine that doesn't allow SSH (or won't allow Drush to be installed)? Fear not, as long as you do have access to your remote database, you can use Drush to manipulate your setup. Is it easy? Probably not as elegant as I'd like, but it works for me.
First, you'll need an S/FTP client like Cyberduck or, like I do, the built in project remote synchronization in NetBeans. Both of these programs have a "watch" function that will watch a directory and automatically synchronize it's remote counterpart when things are added/removed/updated in the local filesystem. Make sure your S/FTP client is running in "watch" or "synchronize" mode when you are using Drush at the command line to make sure that new modules are uploaded when you run
drush dl or anything that changes your local filesystem.
Secondly, once you've set up your local copy of Drupal, you'll need to make sure that the sites/default/settings.php (or your site's equivalents) are pointing to the remote database. You'll probably need to give your hosting company's support line a call.
Third, make sure Drush can connect to your remote database. This is as simple as cd'ing to your site's local directory and issuing the
drush sqlc command. Remote database connections can be slow, so give that a second.
Once you've arrived at your mysql or postgres command prompt (or whatever you're using) you know you're good to go. Remote connections like this can be slow at times, but I still find using Drush is preferable when installing new modules, clearing caches and is entirely necessary for rebuilding registries.