When I ssh into another machine with Debian with my account(with sudo permissions), my backspace key generates some awkward symbols on pressing. Also Tab & del keys don't work too.

On the other hand, I also have another account on the same machine & when I ssh through this account, its terminal works perfectly fine. I couldn't figure out why is this happening.


Beside "stty" solution, you may try the "TERM" solution.

You ssh to your Debian from some terminal (putty, solaris dterm, debain xterm, you-name-it), this termninal announce capabilities (which includes keys such as Backspace and Tab) via TERM environment variable.

So, after ssh to unix host (it doesn't depend debian it or other host) set the TERM variable according to your terminal. Consider you're using bash as shell and vt100 as terminal:

export TERM=vt100

ps: TERM should be announced via ssh automagically, but in some circumstances this magic fails.

  • 1
    still doesn't work :( – gopi1410 Aug 14 '12 at 17:49
  • What terminal are you using? And what the value of TERM you have tried? – paul Aug 15 '12 at 6:23
  • I tried vt100. How do I get to know the value of TERM? I tried ssh from cygwin (in windows) to Debian. If there are problems with cygwin, I even tried it from ubuntu terminal, but same problem. – gopi1410 Aug 15 '12 at 12:30
  • Not sure cygwin has good terminal emulation, as far as I know, cygwin just using regular windows console which lacks terminal emulation (may be wrong). From ubuntu all should works just fine. Something wrong with shell or termcap library on debian. Login from Ubuntu and give me output of commands: 1. echo $TERM 2. stty -a – paul Aug 16 '12 at 4:13
  • 2
    While this didn't directly help me, since TERM was correctly set, it did help identify the problem. I was missing the terminfo entries for my terminal. I am using urxvt and on arch you need to install rxvt-unicode-terminfo to fix this particular issue – Xandaros Nov 13 '15 at 11:32

I have seen such problems before.

Take the backspace for example, the remote host expects some character to be used as "erase/backspace" , while you pressing backspace in the terminal , the terminal program will send some character to the remote host, if what the remote host expects diffs with the characters sent by the terminal program, you would encounter this issue. So a quick fix is as below:

  1. run command #stty -a in the remote host, and find what is expected to be an erase code in the output. Say erase=^?.
  2. In the terminal, press Ctrl + v and press your backspace. You'll see what code is sent as "erase". Say it is ^H.
  3. In the remote host, run #stty erase ^H.
    (Note: use Ctrlv + Backspace, do not type the ^ manually)

You can fix the Tab issue with the same as above.

  • My backspace character is some special symbol something like an inverted triangle. So its not working – gopi1410 Jul 16 '12 at 10:26
  • 1
    This simple comment is certainly the best solution I have seen to this. It feels like a kludge but it works. – Paulo Matos Aug 13 '15 at 8:08
  • This worked for me! What I don't understand though is why my shell handles backspace as expected, but reading from stdin in my app does not. Doing your suggested change results in backspace working for both. My understanding is that the shell handles stdin buffering, so shouldn't the backspace-handling be the same for both the shell and an app? – Samuel Aug 18 '15 at 22:24
  • 1
    What if no code at all is sent? Ctrlv + backspace produces nothing... – Manfredo Jul 31 '17 at 8:24
  • For me, the backspace code is the same as stty -a output, but still does not work – Matej J Nov 15 '19 at 13:04

This is because your default shell is sh, to use bash, just run bash from your shell.


To set bash as your default shell:

chsh -s /bin/bash 


sudo chsh -s /bin/bash yourusername
  • 2
    This one fixed it for me. Never even though to look at my login shell! – James Pack Jul 3 '17 at 17:19
  • 2
    I am seeing this problem, but my shell is bash. – fraxture Jul 29 '19 at 0:22
  • Thanks, this fixed the issue for me too. – Sailab Rahi Nov 18 '20 at 12:06

Your shell may be set to /bin/sh instead of /bin/bash

  • 1
    Related to this answer: unix.stackexchange.com/questions/50542/… – Samuel Sep 3 '15 at 18:36
  • 1
  • 1
    This would be more helpful if it explained a little more and how to change it, but it was the problem I had. Thanks @Tom for your link that fixed the issue for me. – Jake Mar 28 '16 at 14:40
  • This was the reason in my case.. for that particular user. No shell was defined in /etc/passwd, when I added :/bin/bash to his line it worked. You can find out what shell is being used with echo $0 – MSpreij Sep 4 '19 at 20:51

I usually use this to fix any funky character output in my terminal. It resets all the special characters to their default values.

stty sane

From the stty man page:

same as cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke, all special characters to their default values


on top of paul's answer, if you want to retain the ability to have colorful output, you can use xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc
  • 3
    toe -a shows a list of supported terminal types ... xterm-88color is by far not the only option and in fact may be unavailable on particular systems. – 0xC0000022L Oct 16 '19 at 19:31

Try this command

stty sane

I think your terminal line settings got corrupted, this command will reset everything to default.

  • i had the same issue and this command solved it – Aravind Ekan Feb 20 '20 at 13:03

After connecting from Fedora to an OpenWrt host with ssh the remote bash
terminal had problems with some control characters. TERM variable in source
host was set to rxvt-unicode-256color. Since it seemed that OpenWrt repos did
not provide terminfo file for that terminal I copied rxvt-unicode-256color
terminfo file from source host to remote host directory:
/usr/share/terminfo/r/ .
It worked.


Verify that the remote host shell TERM setting matches your terminal's term setting (localhost) and that the remote host supports the TERM setting.


  1. From iTerm (or another terminal app)
$ echo $TERM

You don't need to open tmux. I am using tmux to force the error since it uses an relatively uncommon terminal config.

  1. Open tmux (basically another terminal within a terminal app)
$ echo $TERM
  1. From tmux run ssh command & check TERM setting
$ ssh <remote host>
# Logged into remote host now run...
$ echo $TERM

So tmux communicated to the remote host properly but we have backspace or some other matching key issue. Lets check which terminals the remote host supports.

  1. From remote host
$ toe -a
xterm-256color  xterm with 256 colors
xterm-color     generic "ANSI" color xterm (X Window System)
xterm           X11 terminal emulator
linux           linux console
dumb            80-column dumb tty
ansi            ansi/pc-term compatible with color

Looks like the remote host does not support tmux-256color, the TERM value sent by tmux. It does support xterm-256color which we know our terminal app supports.

  1. From remote host change TERM value
export TERM=xterm-256color

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.