문제 상황
원격 SSH로 접속해서 htop이나 다른 프로그램을 실행해 놓으면, 시간이 지나면서 세션이 멈추는 현상이 발생했습니다.
원인 분석
SSH 연결이 끊기는 주요 원인:
- 서버/클라이언트의 타임아웃 설정
- 중간 네트워크 장비(라우터, 방화벽)에서 연결 끊김
- TCP keepalive 미설정
해결 방법
1. 서버측 설정 (Linux SSH 서버)
/etc/ssh/sshd_config 파일을 수정합니다:
# TCP 레벨 연결 유지 활성화
TCPKeepAlive yes
# 30초마다 클라이언트에게 연결 확인 신호 전송
ClientAliveInterval 30
# 최대 10회까지 무응답 허용 (30초 × 10 = 5분)
ClientAliveCountMax 10
설정 후 SSH 서비스 재시작:
sudo systemctl restart ssh
2. 클라이언트측 설정 (접속하는 PC/Mac)
~/.ssh/config 파일을 생성하거나 수정합니다:
Host 서버별칭
HostName 서버주소
Port 포트번호
User 사용자명
ServerAliveInterval 30
ServerAliveCountMax 10
TCPKeepAlive yes
3. 설정 효과
변경 전:
- 60초 × 3회 = 최대 3분 무응답 허용
변경 후:
- 30초 × 10회 = 최대 5분 무응답 허용
- 서버와 클라이언트 양쪽에서 연결 상태 확인
- TCP keepalive로 중간 네트워크 장비의 연결 끊김 방지
추가 팁
tmux/screen 사용
세션이 끊겨도 프로세스가 계속 실행되도록 하려면:
# tmux 설치 (Ubuntu/Debian)
sudo apt install tmux
# tmux 세션 시작
tmux
# 세션 분리: Ctrl+b, d
# 세션 재접속: tmux attach
SSH config로 간편 접속
설정 파일 작성 후:
# 이전
ssh -p 15001 user@example.com
# 이후 (더 간편!)
ssh 서버별칭
참고사항
- 설정은 서버와 클라이언트 양쪽 모두 적용하는 것이 가장 안정적입니다
- 회사 방화벽이나 공유기에서 추가적인 타임아웃 설정이 있을 수 있습니다
- VPN을 사용하면 더욱 안정적인 연결을 유지할 수 있습니다