Footswitches (pedals), such as those designed by XKeys (http://xkeys.com/XkeysFootPedals/index.php) and sold under various badges, can offload some work from the hands, which may be helpful if you have RepeatedStrainInjury. They are excellent for modifier keys (Ctrl, Alt, Shift) but are also more widely useful than that (EmacsVersor is designed partly for elegant footswitch use).
Update, 2011-05-31: I’ve been struggling to set up the USB version of the XKeys pedals in an all-Linux environment, having previously always used the PS2 version. XKeys provide a Windows-only program for setting the keycodes, and when I asked about getting the information necessary for programming the pedals from Linux, they said they don’t release that information. So in an all-Linux environment, I now recommend making your own: cannibalize a cheap keyboard for its controller, and add switches and your own mechanical hardware. (It’ll be a lot cheaper too.)
I have bought one 3-pedal switches from http://www.pcsensor.com/index.php?_a=viewCat&catId=2 and two 1-pedal switches. On ebay they are even cheaper. I assigned Ctrl, Shift and Enter keys to the 3-pedal foot switches. It works fine except two pedals pressed at the same time do not give the combination (for example Ctrl+Shift). Only the last pressed pedal is active. Perhaps this is the problem of a setting program (http://www.pcsensor.com/index.php?_a=viewDoc&docId=6).
On the other hand I have a problem with assigning Ctrl or Shift key to the 1-pedal switch, perhaps it is a bug in the software. The problem is that the software fails to set the key properly. That is it send Ctrl or Shif key pressed when the pedal is not pressed and when the pedal is pressed, the Ctrl/Shift key is inactive. I wrote a few emails to PC Sensor informing about the problem, however so far no reply 😟
I will also try to make custom pedals/buttons as described and shown here http://blog.makezine.com/archive/2011/04/the-awesome-button.html however instead of the teensy USB controller I’m planning to use a cheap USB numeric keyboard or a USB keyboard as advised before. I will also need to find a good easy button replacement because those buttons are only available in UK  😟 Any suggestions?
In the end I use only two foot pedal switches: one for Ctrl key and the other for Shift key. I tried with 3 pedal switches but I found this inconvenient to search the middle pedal (assigned to RET key) with the foot. With just two pedal you don’t need to move the foots and I assigned RET key to S-SPC (Shift+Space). Also you can easily press to pedals at the same time to have S-C combination and create keybindings from C-A (C-S-a) to C-Z (C-S-z). Moreover I moved the backspace key to CapsLock key (before CapsLock was for Ctrl but now it’s not needed anymore since I use one pedal for it). After trying different USB foot pedals, I ended up with the custom-made pedals composed on Teensy 2.0 Usb controller (16$), 2 doorbell switches (4$) used as pedals (but also pushbuttons can be used) and wires. Loading custom program to assign Ctrl and Shift keys with Arduino software (Teensyduino) is quite easy since there are examples on their website. – SewerynKokot