GitHub에 git push 또는 git pull을 하다가 Host key verification failed가 뜨면 대부분 SSH가 접속하려는 서버의 호스트 키를 신뢰하지 못한다는 뜻입니다. 함께 자주 보이는 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!, Offending ECDSA key in ~/.ssh/known_hosts 메시지도 같은 흐름에서 확인해야 합니다.


해결의 핵심은 known_hosts 파일을 통째로 지우는 것이 아니라, 문제가 생긴 도메인이나 IP만 안전하게 제거한 뒤 공식 fingerprint를 확인하고 다시 접속하는 것입니다. GitHub처럼 공식 SSH fingerprint를 제공하는 서비스는 공식 문서와 대조할 수 있지만, 회사 서버나 개인 서버는 관리자 확인 없이 무작정 승인하면 안 됩니다.


SSH known_hosts 오류에서 Host key verification failed와 REMOTE HOST IDENTIFICATION HAS CHANGED 해결 흐름을 보여주는 터미널 이미지

SSH known_hosts 오류 메시지 원문부터 확인하기

먼저 터미널에 나온 오류 문구를 정확히 확인해야 합니다. 같은 SSH 오류처럼 보여도 Permission denied (publickey)는 계정 키 인증 문제이고, Host key verification failed는 서버 호스트 키 검증 문제입니다.


Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

아래처럼 긴 경고가 함께 나오면 기존에 저장된 서버 키와 현재 서버가 보내는 키가 달라졌다는 의미입니다.


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Offending ECDSA key in /Users/username/.ssh/known_hosts:12
Host key verification failed.

바로 구분할 점

개인 SSH 키가 틀린 문제라면 Permission denied (publickey)가 중심이고, 서버의 신원 확인이 막힌 문제라면 Host key verification failed 또는 REMOTE HOST IDENTIFICATION HAS CHANGED가 중심입니다.


known_hosts 파일은 무엇이고 왜 오류가 날까?

known_hosts는 내 컴퓨터가 이전에 접속했던 SSH 서버의 공개 호스트 키를 저장하는 파일입니다. SSH는 다음 접속 때 서버가 같은 키를 보내는지 비교해, 내가 접속하려는 서버가 예전과 같은 서버인지 확인합니다.


이 검증은 귀찮은 절차가 아니라 보안 기능입니다. 중간자 공격, DNS 오염, 잘못된 서버 접속처럼 위험한 상황에서 사용자가 잘못된 서버를 신뢰하지 않도록 막아줍니다.


GitHub push/pull 중 발생하는 경우

원격 저장소 주소가 git@github.com:사용자명/저장소.git 형태라면 Git은 HTTPS가 아니라 SSH로 GitHub에 접속합니다. 이때 내 컴퓨터의 known_hosts에 저장된 github.com의 호스트 키와 현재 GitHub가 보내는 키가 맞지 않으면 접속이 차단됩니다.


서버 IP나 도메인이 바뀐 경우

개인 서버, 회사 서버, 클라우드 인스턴스는 재설치나 이전 과정에서 SSH 호스트 키가 바뀔 수 있습니다. IP는 그대로인데 서버가 새로 만들어졌거나, 도메인이 다른 서버를 가리키게 된 경우에도 같은 오류가 날 수 있습니다.


VPN, 프록시, 사내 Git 환경이 섞인 경우

회사 VPN, 프록시, 사내 GitLab, GitHub Enterprise, 개인 GitHub를 함께 쓰면 접속 대상이 헷갈릴 수 있습니다. 특히 같은 별칭을 ~/.ssh/config에 여러 번 쓰거나, 도메인과 IP를 섞어 쓰면 어느 항목을 제거해야 하는지 혼란스러워집니다.


가장 안전한 해결 순서

무작정 known_hosts 파일 전체를 삭제하면 기존에 신뢰하던 서버 기록이 모두 사라집니다. GitHub 하나 때문에 문제가 생겼다면 github.com 항목만 제거하는 방식이 안전합니다.


상황 권장 조치 주의점
GitHub SSH 접속 오류 ssh-keygen -R github.com 재접속 시 GitHub 공식 fingerprint 확인
특정 서버 IP 오류 ssh-keygen -R 192.0.2.10 서버 재설치 여부를 먼저 확인
사내 Git 서버 오류 관리자에게 fingerprint 확인 임의로 yes 입력하지 않기

1단계: 현재 원격 저장소 주소 확인

GitHub 오류인지, 사내 Git 서버 오류인지 먼저 확인합니다.


git remote -v
git remote -v

결과가 아래처럼 github.com이면 GitHub SSH 접속 문제를 확인하면 됩니다.


origin  git@github.com:username/repository.git (fetch)
origin  git@github.com:username/repository.git (push)

2단계: 문제가 된 호스트만 known_hosts에서 제거

주의: 아래 명령어는 known_hosts 전체 삭제가 아니라 지정한 호스트 항목만 제거합니다. GitHub 문제라면 github.com만 제거하고, 개인 서버 문제라면 해당 도메인이나 IP만 입력하세요.


ssh-keygen -R github.com

특정 IP로 접속했다면 IP를 넣습니다.


ssh-keygen -R 192.0.2.10

SSH 포트를 기본 22번이 아닌 다른 포트로 쓴다면 아래처럼 포트까지 포함해 제거할 수 있습니다.


ssh-keygen -R "[example.com]:2222"

3단계: GitHub SSH 접속을 다시 테스트

항목을 제거한 뒤 다시 SSH 연결을 시도합니다.


ssh -T git@github.com

처음 다시 접속하면 fingerprint 확인 질문이 나올 수 있습니다. GitHub는 공식 문서에서 SSH key fingerprints를 제공하므로, 터미널에 표시된 fingerprint가 공식 목록과 일치하는지 확인한 뒤 승인해야 합니다.


The authenticity of host 'github.com' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

GitHub 공식 문서에서 SSH key fingerprints 목록을 확인하는 화면

출처: GitHub Docs, GitHub's SSH key fingerprints


GitHub 공식 fingerprint와 일치한다면 yes를 입력합니다.


yes

4단계: push 또는 pull 다시 실행

SSH 테스트가 정상이라면 원래 하려던 Git 명령어를 다시 실행합니다.


git pull

git push

Mac, Windows Git Bash, WSL에서 known_hosts 위치가 다른 이유

known_hosts는 운영체제와 터미널 환경에 따라 위치가 달라질 수 있습니다. 같은 Windows PC라도 Git Bash에서 실행하는지, PowerShell에서 실행하는지, WSL에서 실행하는지에 따라 홈 디렉터리가 달라집니다.


환경 일반적인 known_hosts 위치 확인 포인트
macOS ~/.ssh/known_hosts 터미널 기본 홈 디렉터리 기준
Windows Git Bash /c/Users/사용자명/.ssh/known_hosts Git Bash의 ~ 기준
Windows PowerShell C:\Users\사용자명\.ssh\known_hosts OpenSSH 클라이언트 사용 여부 확인
WSL /home/리눅스사용자명/.ssh/known_hosts Windows 홈과 WSL 홈은 별도

macOS에서 확인하는 명령어

ls -al ~/.ssh
cat ~/.ssh/known_hosts

Windows Git Bash에서 확인하는 명령어

ls -al ~/.ssh
cat ~/.ssh/known_hosts

WSL에서 확인하는 명령어

pwd
ls -al ~/.ssh
cat ~/.ssh/known_hosts

Windows에서 Git Bash와 WSL을 함께 쓰는 경우, Git Bash에서 고친 known_hosts와 WSL에서 사용하는 known_hosts가 다를 수 있습니다. 오류가 나는 터미널에서 명령어를 실행해야 같은 파일이 수정됩니다.


known_hosts 전체 삭제는 언제 조심해야 할까?

known_hosts 파일을 통째로 삭제하면 GitHub뿐 아니라 지금까지 접속했던 모든 SSH 서버의 신뢰 기록이 사라집니다. 개인 PC에서 GitHub 하나만 쓰는 경우에는 큰 문제가 없어 보일 수 있지만, 회사 서버나 운영 서버에 접속하는 환경이라면 권장하기 어렵습니다.


전체 삭제보다 특정 호스트 제거가 우선입니다

문제가 github.com에서만 발생했다면 ssh-keygen -R github.com을 사용하세요. 파일 전체를 삭제하면 이후 여러 서버에 접속할 때마다 fingerprint를 다시 승인해야 하고, 실수로 잘못된 서버를 승인할 가능성도 커집니다.


삭제해도 비교적 판단이 쉬운 경우

GitHub처럼 공식 문서에서 SSH fingerprint를 공개하고, 사용자가 공식 fingerprint와 터미널 메시지를 직접 대조할 수 있는 경우에는 특정 호스트 항목을 제거한 뒤 다시 등록하는 방식으로 처리할 수 있습니다.


반드시 관리자 확인이 필요한 경우

사내 GitLab, 회사 VPN 내부 서버, 클라우드 운영 서버, 배포 서버는 서버 재설치나 보안 사고 가능성을 함께 확인해야 합니다. 특히 REMOTE HOST IDENTIFICATION HAS CHANGED 메시지는 단순 오류가 아니라 “서버 신원이 예전과 다르다”는 경고이므로, 관리자에게 현재 SSH host key fingerprint를 확인한 뒤 진행하는 것이 안전합니다.


자주 헷갈리는 SSH 오류와 구분하기

known_hosts 오류를 해결했는데도 GitHub 접속이 안 된다면 다음 오류와 구분해야 합니다.


오류 메시지 주요 원인 확인할 것
Host key verification failed 서버 호스트 키 검증 실패 known_hosts, 공식 fingerprint
Permission denied (publickey) 내 개인 SSH 키 인증 실패 SSH key 등록, ~/.ssh/config, 계정 권한
Repository not found 저장소 주소 또는 접근 권한 문제 원격 URL, GitHub 권한, 저장소 이름

여러 GitHub 계정을 쓰는 환경이라면 known_hosts 문제가 아니라 SSH 키 선택 문제일 수도 있습니다. 이 경우에는 ~/.ssh/config에서 개인 계정과 회사 계정의 Host 별칭을 분리해야 합니다.


재발 방지를 위한 SSH 설정 체크리스트

한 번 해결한 뒤에도 같은 오류가 반복된다면 원격 저장소 주소, SSH config, 터미널 환경을 함께 정리하는 것이 좋습니다.


재발 방지 체크리스트
  • GitHub 원격 주소가 HTTPS인지 SSH인지 확인합니다.
  • 개인 GitHub와 회사 GitHub를 함께 쓰면 ~/.ssh/config에서 Host 별칭을 분리합니다.
  • Git Bash, PowerShell, WSL 중 실제 오류가 난 터미널에서 명령어를 실행합니다.
  • 사내 서버는 fingerprint 변경 여부를 관리자에게 먼저 확인합니다.
  • known_hosts 전체 삭제보다 ssh-keygen -R 호스트명을 우선 사용합니다.

SSH config 예시

개인 GitHub와 회사 GitHub 계정을 나누어 쓰는 경우에는 아래처럼 Host 별칭을 분리할 수 있습니다. 이 설정은 known_hosts 오류 자체를 해결하는 명령어는 아니지만, 계정과 키가 섞이는 문제를 줄이는 데 도움이 됩니다.


Host github.com-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal
  IdentitiesOnly yes

Host github.com-company
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_company
  IdentitiesOnly yes

이렇게 설정했다면 원격 저장소 주소도 Host 별칭에 맞춰 사용해야 합니다.


git remote set-url origin git@github.com-personal:username/repository.git

함께 보면 좋은 글

GitHub SSH 계정이 여러 개라면
known_hosts 오류를 해결했는데도 Permission denied publickey가 계속 나온다면 서버 신원 문제가 아니라 SSH 키 선택 문제일 수 있습니다. 개인 계정과 회사 계정을 함께 쓰는 환경이라면 키 분리 설정을 함께 확인하세요.
GitHub SSH 여러 계정 Permission denied publickey 해결: 개인·회사 키 분리 설정

SSH Key를 처음 세팅하는 단계라면
Host key verification 문제와 별개로 GitHub 계정에 SSH Key가 등록되어 있지 않으면 push와 pull이 계속 실패합니다. 새 PC나 새 맥북에서 개발환경을 다시 세팅했다면 SSH Key 등록 순서를 먼저 확인하는 것이 좋습니다.
GitHub SSH Key 세팅 2026: 비밀번호 없이 push/pull 하는 법

원격 저장소 주소가 바뀌었다면
SSH 오류처럼 보여도 실제 원인은 원격 저장소 주소가 예전 주소로 남아 있는 경우가 있습니다. 저장소 이름을 바꿨거나 HTTPS 주소와 SSH 주소를 바꿔 쓰는 중이라면 remote origin 값을 확인해야 합니다.
Git remote origin 변경 방법: 저장소 주소 바뀌었을 때 수정 순서

push가 거절되는 오류라면
SSH 접속은 정상인데 push 단계에서 Updates were rejected 또는 non-fast-forward가 나온다면 known_hosts 문제가 아닙니다. 원격 저장소의 변경 이력과 내 로컬 브랜치 이력이 어긋난 상황이므로 pull, rebase, push 순서를 확인해야 합니다.
Git push rejected 오류 해결: non-fast-forward와 Updates were rejected 순서

pull 중 로컬 변경사항이 막힌다면
GitHub SSH 접속은 성공했지만 pull 과정에서 Your local changes would be overwritten by merge가 나오면 로컬 수정 파일과 원격 변경사항이 충돌할 수 있는 상태입니다. 커밋, stash, discard 중 어떤 선택이 안전한지 먼저 판단해야 합니다.
Git pull 오류 해결: Your local changes would be overwritten by merge 원인과 해결

공식 자료로 더 확인하기

SSH host key는 접속 대상 서버의 신원을 확인하는 기준입니다. 특히 GitHub나 회사 서버에서 fingerprint 경고가 나오면 블로그 글만 보고 승인하지 말고, 공식 문서나 서버 관리자에게 확인한 뒤 진행하는 것이 안전합니다.


GitHub SSH key fingerprints

GitHub에 SSH로 처음 다시 접속할 때 터미널에 표시되는 ED25519, ECDSA, RSA fingerprint가 공식 값과 일치하는지 확인할 수 있습니다.

GitHub 공식 SSH fingerprint 확인하기

GitHub Host key verification failed 도움말

Host key verification failed 오류가 왜 발생하는지, 서버 키가 예상과 다를 때 어떤 기준으로 접속 여부를 판단해야 하는지 확인할 수 있습니다.

GitHub SSH host key 오류 설명 보기

OpenSSH ssh-keygen 문서

known_hosts에서 특정 호스트 항목을 제거할 때 사용하는 ssh-keygen 명령어와 옵션 형식을 확인할 수 있습니다.

OpenSSH ssh-keygen 명령어 문서 보기

자주 묻는 질문

Q1. known_hosts 파일을 삭제해도 되나요?

GitHub 하나만 문제라면 known_hosts 전체 삭제보다 ssh-keygen -R github.com처럼 특정 호스트만 제거하는 방식이 안전합니다. 전체 파일을 삭제하면 기존에 신뢰하던 서버 기록이 모두 사라져 여러 서버에 다시 접속할 때마다 fingerprint를 승인해야 합니다. 회사 서버나 운영 서버 접속 기록이 있다면 전체 삭제는 피하는 것이 좋습니다.


Q2. Host key verification failed와 Permission denied publickey는 같은 오류인가요?

둘 다 SSH 접속 과정에서 보일 수 있지만 원인은 다릅니다. Host key verification failed는 접속하려는 서버의 호스트 키를 신뢰하지 못하는 문제이고, Permission denied (publickey)는 내 SSH 개인 키로 계정 인증에 실패한 문제입니다. 전자는 known_hosts와 fingerprint를, 후자는 SSH key 등록과 config 설정을 확인해야 합니다.


Q3. GitHub fingerprint가 바뀌었다고 나오면 바로 yes를 입력해도 되나요?

바로 입력하지 않는 것이 안전합니다. 터미널에 표시된 fingerprint를 GitHub 공식 SSH key fingerprints 문서와 먼저 비교해야 합니다. 공식 값과 일치한다면 승인할 수 있지만, 값이 다르다면 잘못된 서버에 접속 중일 수 있습니다. 회사 네트워크, VPN, 프록시, DNS 설정도 함께 확인하는 것이 좋습니다.


Q4. Windows에서 Git Bash와 WSL 중 어디에서 명령어를 실행해야 하나요?

오류가 발생한 터미널에서 실행해야 합니다. Git Bash의 ~/.ssh/known_hosts와 WSL의 /home/사용자명/.ssh/known_hosts는 서로 다른 파일일 수 있습니다. Git Bash에서 push가 실패했다면 Git Bash에서, WSL 안에서 실패했다면 WSL 터미널에서 ssh-keygen -R 명령어를 실행하세요.


Q5. Offending ECDSA key in known_hosts:12는 무슨 뜻인가요?

known_hosts 파일의 12번째 줄에 저장된 ECDSA 호스트 키가 현재 서버가 보내는 키와 맞지 않는다는 의미입니다. 직접 파일을 열어 해당 줄을 지울 수도 있지만, 줄 번호를 잘못 건드릴 수 있습니다. 가능하면 ssh-keygen -R github.com처럼 호스트명을 기준으로 제거하는 방식이 더 안전합니다.


SSH known_hosts 오류는 파일을 전부 지우는 문제가 아니라, 접속 대상의 신원을 확인한 뒤 문제가 된 호스트 기록만 안전하게 갱신하는 문제입니다.