문제 해결

SSH "Connection closed by remote host": 원인과 해결법

서버가 수락한 뒤 연결을 끊었습니다 — 보통 fail2ban 차단, sshd 재시작/과부하, 또는 연결 수 한도입니다. refused 및 timed out과 구분하는 법, 차단 확인법, 서버 로그 읽는 법을 설명합니다.

CC Chen Chen· 창업자·2026년 6월 24일·6분 분량

"Connection closed by remote host"의 의미

서버는 당신의 연결을 수락한 뒤 의도적으로 끊어버렸습니다. 이것이 refused(아무것도 수신 대기하지 않음)나 timed out(아예 응답이 없음)과의 핵심 차이입니다. 여기서는 무언가가 응답한 뒤 끊긴 것입니다. Connection closed by remote host, Connection reset by peer, kex_exchange_identification: Connection closed by remote host 같은 변형들은 거의 항상 다음 중 하나를 뜻합니다. fail2ban에 차단됨, 서버의 sshd가 재시작 중/과부하, 또는 연결 수 한도에 도달, 입니다.

원인, 가능성 높은 순서

#원인단서
1로그인 실패 후 fail2ban / IP 차단어제는 됐는데, 실패를 몇 번 한 오늘은 안 됨
2sshd가 재시작 중이거나 막 재시작함서버가 재시작 중; 잠시 후면 됨
3연결이 너무 많음(MaxStartups)바쁜 서버, 부하 시 간헐적
4hosts.deny / TCP wrappers / 방화벽 리셋특정 IP가 서버에서 차단됨
5그 포트에서 SSH가 아닌 서비스에 닿음포트가 틀림——다른 것이 응답 후 끊음

1 — 가장 유력한 원인: fail2ban에 차단됨

이 에러 직전에 키/비밀번호 시도가 몇 번 실패했다면, fail2ban(또는 클라우드 제공업체의 동등 기능)이 당신의 IP를 차단했을 가능성이 높습니다. 연결하는 순간 패킷을 버리기 때문에 "closed by remote host"로 나타납니다. 아직 접속 가능한 다른 머신에서 확인하고 해제하세요:

sudo fail2ban-client status sshd          # is your IP listed?
sudo fail2ban-client set sshd unbanip 1.2.3.4

휴대폰에서는 특히 흔합니다. IP가 바뀌는 것(Wi-Fi에서 셀룰러로)에 더해 키 시도를 한두 번 틀리는 것만으로도 차단을 유발하기에 충분합니다. 근본 인증 문제를 고치면(Permission denied 참조) 재발을 막을 수 있습니다.

2 — sshd 재시작, 리부트, 또는 과부하

머신이 재시작 중이거나 sshd가 설정을 리로드 중이라면, 그 시간대의 연결은 끊깁니다. 1분 후에 다시 시도하세요. 만성적으로 바쁜 서버에서는 sshd의 MaxStartups 스로틀(기본값 10:30:100)이 처리 중인 미인증 연결이 너무 많아지면 끊기를 시작합니다——부하 시 간헐적 끊김이 보입니다. 서버에서 값을 올리면 도움이 됩니다:

# /etc/ssh/sshd_config
MaxStartups 30:50:100
# then: sudo systemctl reload ssh

3 — 서버 자체 로그를 보라

확실한 답은 서버에 있습니다. 접근 가능한 수단(콘솔, 다른 세션)에서:

sudo journalctl -u ssh -n 50      # or: tail -n 50 /var/log/auth.log

차단인지, 거부된 사용자인지, hosts.deny인지, 설정 오류인지를 분명히 알려줍니다——추측을 한 줄 진단으로 바꿔줍니다.

휴대폰에서 복구하기

모바일에서 답답한 점은, 방금 당신을 끊은 머신을 조사하려 해도 그 박스에 SSH로 들어가지 못하는 경우가 많다는 것입니다. 그 네트워크에 접근 가능한 다른 머신이 있다면, 그곳을 경유해서 fail2ban-client / journalctl 점검을 실행하세요. 그리고 원본 에러를 앞에 두고 다섯 가지 원인 중 어느 것인지 모르겠다면, 그것을 선택해 어시스턴트에게 물어보세요——TermAI의 AI는 실제 메시지와 당신의 컨텍스트를 읽고, 차단인지 스로틀인지 재시작인지에 가까운지를 확인용 명령과 함께 알려줍니다.

SSH 끊김 메시지를 해석하는 TermAI의 AI 어시스턴트
closed-by-remote-host에는 똑같이 생긴 흔한 원인이 다섯 가지 있습니다. 에러를 선택하면 AI가 당신의 세션에 맞춰 가장 가능성 높은 것으로 좁히고 검증 명령을 제시합니다.

자주 묻는 질문

"Connection closed by remote host"의 원인은 무엇인가요?
서버가 수락한 뒤 연결을 끊은 것으로, 가장 흔하게는 fail2ban IP 차단, sshd 재시작/과부하, 연결 수 한도(MaxStartups), 또는 호스트 기반 차단입니다. 서버 인증 로그를 확인하세요.

connection refused와 어떻게 다른가요?
Refused = 아무것도 수신 대기하지 않음. Closed by remote host = 무언가가 응답한 뒤 의도적으로 끊음, 입니다.

계속 차단됩니다 — 왜죠?
반복된 인증 실패(흔히 잘못된 키 또는 제시되지 않은 키)가 fail2ban을 유발합니다. 인증 문제 자체를 고치고, 고정 주소가 있다면 화이트리스트에 넣으세요.

kex_exchange_identification: Connection closed는 무엇인가요?
같은 부류입니다——서버가 초기 핸드셰이크 도중 연결을 끊은 것으로, 보통 차단, 스로틀, 또는 그 포트에서 SSH가 아닌 서비스에 닿은 것이 원인입니다.

핵심 요약

  • 의미: 서버가 수락한 뒤 의도적으로 연결을 끊음(refused도 timed out도 아님)
  • 최유력 원인: 로그인 실패 후 fail2ban / IP 차단——fail2ban-client status sshd
  • 그 외: sshd 재시작, 부하 시 MaxStartups 스로틀, hosts.deny, 포트 오류
  • 진단: 서버의 journalctl -u ssh / /var/log/auth.log가 원인을 명시
  • 모바일 팁: IP 변경 + 키 시도 한두 번 실패면 쉽게 차단 유발——인증 근본 원인을 고칠 것
Try TermAI

Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog