Some terminals send
^h (character number 8) for the BackSpace key, and some send
^? (character number 127). Many terminal emulators can be configured, and most programs can be configured to know which key to expect. Obviously the two sides must agree.
Stty is a way in which applications can query the terminal's configuration.
erase = ^? means that your terminal description file on the server claims that when your terminal sends
^?, it means “erase the previous character”.
werase = ^? means that
^? means “erase the previous word”. There's a contradiction between these two settings.
When you log in over ssh, the ssh client sends a name for the terminal, which is put in the
TERM environment variable. Programs on the server then look up descriptions of the terminal in a database (called termcap or terminfo). If these descriptions are broken, or if a configuration file somewhere (such as
~/.bashrc) overrides the descriptions with wrong data, you might find that you have a mismatch. For example, one possible source for your problem is if some initialization file contains the command
stty werase '^?' (forcing
^? to mean a word erase) while your terminal sends
^? for the backspace key.
Ideally, you should fix the conflict, as a lot of programs will read this information.
In Putty, you can configure which of
^h the BackSpace key sends. Check the value of this setting. Maybe the easiest way to fix your problem is to make Putty send
^h for BackSpace, and make sure the server uses that setting (
stty erase '^h', to be put in
~/.bashrc, will force it).