문제 해결

"Host key verification failed": 의미와 해결 방법

서버가 클라이언트가 기억하던 것과 다른 식별 키를 제시하고 있습니다 ── 보통은 재설치나 IP 재사용이지만, 가끔은 더 나쁜 경우도. 새 핑거프린트를 대역 외로 검증하는 방법, ssh-keygen -R 또는 앱 내에서 고치는 법, 그리고 이런 번거로움을 피하는 법.

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

이 오류가 실제로 의미하는 것

"Host key verification failed"(흔히 더 크게 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 와 함께 표시됨)는 서버가 클라이언트가 이전 연결에서 기억하던 것과 다른 식별 키를 제시하고 있다는 뜻입니다. 이것은 정확히 중간자 공격처럼 보이기 때문에 SSH는 계속 진행하기를 거부합니다. 그러나 솔직히 말하면, 대부분의 경우 공격이 아닙니다 ── 서버 재설치, IP 재사용, 또는 VM 복원입니다. 올바른 대응은 키가 바뀌었는지 먼저 파악하고, 그런 다음에야 옛 키를 제거하는 것입니다. 반사적으로 삭제하지 마세요.

호스트 키가 바뀌는 이유(무해 vs 의심스러움)

원인무해?확인 방법
서버 재설치 / OS 재플래시✅ 예당신(또는 팀)이 직접 했다
DHCP가 그 IP를 다른 머신에 할당했다✅ 예라우터 장치 목록에 다른 기기가 보인다
클라우드 IP가 새 VPS에 재사용됐다✅ 예옛 서버가 파기되고 주소가 재활용됐다
백업에서 복원 / 마이그레이션한 VM✅ 보통복원 시 새 호스트 키가 재생성됐다
위 어느 것도 아님⚠️ 조사 필요연결 전에 핑거프린트를 대역 외로 검증한다

1단계 — 새 키를 대역 외로 검증하기

콘솔/물리적 접근(또는 이미 신뢰할 수 있는 임의의 세션)이 있다면, 서버에서 현재 핑거프린트를 출력하세요:

ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

그것을 클라이언트 경고에 표시된 핑거프린트와 비교하세요. 일치하면 → 변경은 진짜이고 무해합니다. 옛 항목 제거로 진행하세요. 일치하지 않고 그 변경을 설명할 수 없다면 → 멈추고, 어떤 자격 증명도 입력하기 전에 조사하세요. (SSH가 이렇게 동작하는 이유는 호스트 키 TOFU 설명을 참조하세요.)

2단계 — 옛 키를 제거하고 재연결하기

데스크톱에서는 known_hosts에서 오래된 항목을 삭제합니다:

ssh-keygen -R hostname-or-ip
# then reconnect and accept the new fingerprint
ssh user@host

모바일 클라이언트에는 편집할 파일이 없습니다 ── 기억된 키는 앱 안에 저장됩니다. TermAI에서는 키가 바뀌면 두 핑거프린트를 모두 보여주는 경고가 표시됩니다. 변경이 정당하다고 확인했으면 새 키를 수락하거나(또는 연결 설정에서 저장된 호스트 키를 지우고) 재연결하세요. 그러면 새 키가 고정되어 OpenSSH와 동일한 TOFU 모델이 됩니다.

검증된 새 호스트 키를 수락한 뒤 재연결된 SSH 세션
새 핑거프린트를 대역 외로 검증하고 수락하면 클라이언트가 새 키를 고정합니다 ── 정상으로 돌아오고, 다음번에도 동일한 보호가 적용됩니다.

이런 번거로움 피하기

  • 안정적인 주소. 가정 네트워크에서 "키가 바뀜" 잡음의 대부분은 DHCP가 머신을 IP 사이에서 뒤섞기 때문입니다. Tailscale을 쓰면 각 머신이 하나의 주소를 유지하므로 같은 IP에서 다른 머신에 연결하는 일이 사라지고 키도 "바뀌지" 않게 됩니다.
  • 재설치 시 호스트 키를 보존하세요. /etc/ssh/ssh_host_*를 백업하고 재구축 후 복원하면 클라이언트는 아무것도 눈치채지 못합니다.
  • 검사를 끄지 마세요. StrictHostKeyChecking no는 SSH가 MITM에 대해 가진 유일한 방어를 꺼버립니다. 대신 원인을 고치세요.

FAQ

"REMOTE HOST IDENTIFICATION HAS CHANGED"는 항상 공격인가요?
아니요 ── 보통은 재설치, 복원한 VM, 또는 그 IP가 이제 다른 머신에 속하기 때문입니다. 하지만 MITM 역시 이렇게 보이므로, 수락하기 전에 새 핑거프린트를 대역 외로 검증하세요.

빠르게 고치려면?
변경이 정당하다고 확인한 뒤: 데스크톱에서는 ssh-keygen -R host, 모바일 클라이언트에서는 저장된 호스트 키를 수락/지운 다음 재연결하세요.

휴대폰은 알려진 호스트 키를 어디에 저장하나요?
SSH 앱 안입니다(known_hosts 파일이 아님). TermAI는 연결마다 키를 고정하고, 하나가 바뀌면 두 핑거프린트를 모두 보여주며 경고합니다.

핵심 요약

  • 의미: 서버의 식별 키가 클라이언트가 고정한 것과 다름
  • 보통 무해: 재설치, IP 재사용, 복원한 VM ── 하지만 수락 전에 검증할 것
  • 검증: 서버에서 ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub를 실행해 핑거프린트를 비교
  • 수정: ssh-keygen -R host(데스크톱) / 앱 내에서 새 키 수락(모바일); 검사는 절대 끄지 말 것
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