SSH 접속했더니 Backspace가 안 먹힌다? terminfo 문제 해결법

SSH 접속했더니 Backspace가 안 먹힌다? terminfo 문제 해결법

새 터미널 앱을 설치하고 신나게 쓰다가, 원격 서버에 SSH로 접속한 순간 Backspace가 먹통이 된 경험이 있는가? 글자를 지우려고 Backspace를 눌렀는데 커서가 뒤로 가는 게 아니라 공백이 찍히는 황당한 상황. 이 글에서는 왜 이런 일이 생기는지, 그리고 명령어 한 줄로 어떻게 해결하는지 정리한다.

증상

  • 로컬에서는 모든 게 정상
  • SSH로 원격 서버에 접속하면 Backspace가 space처럼 동작
  • 방향키나 Home/End 같은 특수 키도 이상하게 동작할 수 있음

원인: terminfo가 뭔데?

터미널 프로그램은 종류가 많다. macOS 기본 Terminal.app, iTerm2, Ghostty, Alacritty, WezTerm 등. 이 터미널들은 저마다 키 입력, 색상, 커서 이동을 처리하는 방식이 조금씩 다르다.

terminfo는 이런 터미널별 차이를 정의해 놓은 데이터베이스다. OS는 TERM 환경변수를 보고 "아, 지금 이 터미널을 쓰고 있구나"를 파악한 뒤, 해당 터미널의 terminfo를 찾아서 각 키가 어떤 동작을 하는지 매핑한다.

문제는 SSH 접속 시 발생한다. 로컬 터미널의 TERM 값이 원격 서버로 그대로 전달되는데, 원격 서버에 해당 terminfo가 없으면 키 매핑을 제대로 할 수 없게 된다.

구체적인 시나리오

내 경우는 이랬다.

1. 맥북에서 Ghostty 터미널로 맥미니에 SSH 접속

2. SSH가 TERM=xterm-ghostty를 맥미니로 전달

3. 맥미니에는 xterm-ghostty에 대한 terminfo가 없음

4. 맥미니가 Backspace 키 시퀀스를 해석하지 못함

5. 결과: Backspace를 누르면 글자가 지워지는 대신 공백이 찍힘

Ghostty뿐 아니라 비교적 새로운 터미널 앱이라면 어디서든 같은 문제가 생길 수 있다.

해결: 명령어 한 줄

terminfo가 있는 쪽(로컬)에서 없는 쪽(원격)으로 복사해주면 된다.


infocmp -x xterm-ghostty | ssh your-server tic -x -

이게 전부다. 각 부분을 뜯어보면 이렇다.

명령역할
infocmp -x xterm-ghostty로컬에서 Ghostty terminfo를 텍스트로 출력
`\`파이프로 출력을 다음 명령에 전달
ssh your-server tic -x -원격 서버에서 tic(terminfo 컴파일러)으로 설치

실행 후 SSH를 다시 접속하면 Backspace가 정상 작동한다.

"그냥 TERM 바꾸면 안 돼?"

TERM=xterm-256color로 우회하는 방법도 있다. .bashrc나 SSH config에서 강제로 바꿔주는 식이다. 동작은 하지만, 해당 터미널 고유의 기능(Ghostty의 경우 확장 색상이나 특수 시퀀스 등)을 쓸 수 없게 된다. terminfo를 직접 설치하는 게 더 깔끔한 해결책이다.

정리

  • 새 터미널 앱을 쓸 때 원격 서버에서 키 입력이 이상하면, terminfo부터 의심하자
  • infocmp | ssh ... tic 한 줄이면 해결된다
  • 서버가 여러 대라면 각 서버마다 한 번씩 실행해주면 된다

터미널을 바꿀 때마다 한 번씩 겪을 수 있는 문제인데, 원인을 알고 나면 해결은 간단하다.