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한 줄이면 해결된다- 서버가 여러 대라면 각 서버마다 한 번씩 실행해주면 된다
터미널을 바꿀 때마다 한 번씩 겪을 수 있는 문제인데, 원인을 알고 나면 해결은 간단하다.