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 오류 메시지 원문부터 확인하기
먼저 터미널에 나온 오류 문구를 정확히 확인해야 합니다. 같은 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 -vgit 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 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
함께 보면 좋은 글
공식 자료로 더 확인하기
SSH host key는 접속 대상 서버의 신원을 확인하는 기준입니다. 특히 GitHub나 회사 서버에서 fingerprint 경고가 나오면 블로그 글만 보고 승인하지 말고, 공식 문서나 서버 관리자에게 확인한 뒤 진행하는 것이 안전합니다.
GitHub에 SSH로 처음 다시 접속할 때 터미널에 표시되는 ED25519, ECDSA, RSA fingerprint가 공식 값과 일치하는지 확인할 수 있습니다.
GitHub 공식 SSH fingerprint 확인하기Host key verification failed 오류가 왜 발생하는지, 서버 키가 예상과 다를 때 어떤 기준으로 접속 여부를 판단해야 하는지 확인할 수 있습니다.
GitHub SSH host key 오류 설명 보기known_hosts에서 특정 호스트 항목을 제거할 때 사용하는 ssh-keygen 명령어와 옵션 형식을 확인할 수 있습니다.
OpenSSH ssh-keygen 명령어 문서 보기자주 묻는 질문
SSH known_hosts 오류는 파일을 전부 지우는 문제가 아니라, 접속 대상의 신원을 확인한 뒤 문제가 된 호스트 기록만 안전하게 갱신하는 문제입니다.
댓글