Git Permission denied (publickey) SSH 키 오류 5단계 실전 해결 가이드
git push·clone에서 Permission denied (publickey)가 뜰 때 원인 진단, SSH 키 생성과 GitHub 등록, ssh-agent, 계정별 config, Git의 SSH 경로 설정 순서로 해결합니다.
Git Permission denied (publickey) 오류 원인과 핵심 요약
이 오류는 GitHub에 등록된 공개키와 짝이 맞는 개인키를 내 컴퓨터의 SSH가 찾지 못했거나, 찾았더라도 제시하지 못했다는 뜻입니다. 키가 아예 없는 경우, 키는 있지만 ssh-agent에 올라가 있지 않은 경우, 다른 계정의 키가 먼저 제시되는 경우, 윈도우에서 Git이 다른 SSH 프로그램을 쓰는 경우 중 하나이며 아래 진단 한 번으로 어느 쪽인지 가려집니다.
개인키 파일(확장자 없는
id_ed25519)은 절대 어디에도 붙여 넣거나 업로드하지 마세요. GitHub에 등록하는 것은 항상.pub으로 끝나는 공개키뿐입니다. 개인키가 노출됐다면 해당 키를 GitHub에서 즉시 삭제하고 새로 만들어야 합니다.
증상별 바로가기
| 지금 상황 | 바로 갈 곳 |
|---|---|
| 원인을 모르겠다, 처음 보는 오류다 | 해결 방법 1 |
| SSH 키를 만든 적이 없거나 새 PC다 | 해결 방법 2 |
| 어제까지 됐는데 재부팅 후 갑자기 안 된다 | 해결 방법 3 |
| 회사 계정과 개인 계정을 한 PC에서 같이 쓴다 | 해결 방법 4 |
윈도우 터미널의 ssh -T는 성공하는데 git push나 VS Code·Cursor만 실패한다 |
해결 방법 5 |
해결 방법 1: 어디서 막혔는지 확인하기
-
터미널을 엽니다. 윈도우는 PowerShell, 맥은 터미널 앱입니다.
-
GitHub과 SSH 연결이 되는지 시험합니다.
ssh -T git@github.com -
처음 연결할 때
Are you sure you want to continue connecting질문이 나오면yes를 입력합니다. 화면의 지문이 GitHub 공식 문서에 공개된 지문과 같은지 확인한 뒤 진행하세요. -
Hi 사용자이름! You've successfully authenticated가 나오면 SSH 연결은 정상입니다. 이 경우 저장소 주소가 틀렸거나, Git이 다른 SSH 프로그램을 쓰고 있는 것이므로 아래 5번 과정과 해결 방법 5로 갑니다. -
저장소 주소를 확인합니다.
git remote -v -
git@github.com:계정/저장소.git형식이면 SSH 주소입니다. 계정 이름과 저장소 이름에 오타가 없는지 봅니다. -
2번에서
Permission denied (publickey)가 나왔다면 자세한 기록을 봅니다.ssh -vT git@github.com -
출력에서
Offering public key로 시작하는 줄을 찾습니다.
해결 방법 2: SSH 키 만들고 GitHub에 등록하기
-
이미 만든 키가 있는지 확인합니다. 윈도우 PowerShell은 아래 명령을 씁니다.
ls $env:USERPROFILE\.ssh -
맥은 아래 명령을 씁니다.
ls -al ~/.ssh -
id_ed25519와id_ed25519.pub이 이미 있다면 새로 만들지 말고 6번 등록 단계로 바로 갑니다. -
없다면 키를 만듭니다. 따옴표 안에는 GitHub 계정 이메일을 넣습니다.
ssh-keygen -t ed25519 -C "your_email@example.com" -
저장 위치를 묻으면
Enter로 기본값을 쓰고, 패스프레이즈를 두 번 입력합니다. -
공개키를 클립보드에 복사합니다. 윈도우 PowerShell은 아래 명령입니다.
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard -
맥은 아래 명령입니다.
pbcopy < ~/.ssh/id_ed25519.pub -
GitHub 웹사이트에서 오른쪽 위 프로필 사진을 눌러 [Settings > SSH and GPG keys]로 이동합니다.
-
New SSH key를 누르고, Title에 이 PC를 구분할 이름을 적은 뒤 Key 칸에 붙여 넣고 Add SSH key를 누릅니다.
-
해결 방법 1의
ssh -T git@github.com으로 다시 확인합니다.
4번에서
Overwrite (y/n)?가 나오면 n을 누르세요. 같은 이름의 키가 이미 있다는 뜻이고, 덮어쓰면 그 키를 쓰던 다른 서버와 서비스의 접속이 모두 끊깁니다. 새 키가 꼭 필요하다면 저장 위치를 묻는 단계에서 다른 파일 이름을 지정하세요.
해결 방법 3: ssh-agent에 키 올리기
키를 만들었는데도 안 되거나, 재부팅 후 갑자기 안 된다면 키가 ssh-agent에 올라가 있지 않은 경우가 대부분입니다.
윈도우
-
시작 메뉴에서 PowerShell을 검색해 관리자 권한으로 실행합니다.
-
ssh-agent 서비스를 자동 시작으로 바꾸고 실행합니다. 윈도우에서는 이 서비스가 기본적으로 꺼져 있습니다.
Get-Service ssh-agent | Set-Service -StartupType Automatic -
이어서 서비스를 시작합니다.
Start-Service ssh-agent -
일반 PowerShell 창에서 키를 등록합니다. 패스프레이즈를 묻으면 입력합니다.
ssh-add $env:USERPROFILE\.ssh\id_ed25519 -
등록된 키 목록을 확인합니다. 키 지문이 한 줄 이상 보이면 성공입니다.
ssh-add -l
맥
-
ssh-agent를 실행합니다.
eval "$(ssh-agent -s)" -
키를 등록하면서 패스프레이즈를 키체인에 저장합니다.
ssh-add --apple-use-keychain ~/.ssh/id_ed25519 -
재부팅 후에도 유지되도록
~/.ssh/config파일에 아래 내용을 넣습니다. 파일이 없으면 새로 만듭니다.Host github.com AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519
2번의 서비스 설정 변경은 관리자 권한이 필요합니다. 회사에서 지급한 PC라 관리자 권한이 없다면 IT 담당자에게 ssh-agent 서비스 활성화를 요청하세요.
UseKeychain은 맥 전용 설정이라 윈도우의 config 파일에는 넣지 않습니다.
해결 방법 4: 계정이 여러 개일 때 config로 키 지정하기
회사 계정과 개인 계정을 같이 쓰면, SSH가 엉뚱한 계정의 키를 먼저 제시해 실패하는 경우가 많습니다. GitHub은 같은 공개키를 두 계정에 동시에 등록하지 못하게 막기 때문에, 계정마다 키를 따로 만들어야 합니다.
-
해결 방법 2와 같은 방법으로 두 번째 키를 만듭니다. 저장 위치를 묻는 단계에서
id_ed25519_work처럼 다른 이름을 지정합니다. -
새 키의 공개키를 회사 계정의 [Settings > SSH and GPG keys]에 등록합니다.
-
.ssh폴더의config파일을 엽니다. 윈도우 경로는C:\Users\사용자이름\.ssh\config이며 확장자가 없습니다. -
아래처럼 호스트 별명을 두 개 만듭니다.
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes Host github-work HostName github.com User git IdentityFile ~/.ssh/id_ed25519_work IdentitiesOnly yes -
회사 저장소의 원격 주소를 별명으로 바꿉니다.
회사계정/저장소는 실제 이름으로 바꿉니다.git remote set-url origin git@github-work:회사계정/저장소.git -
별명으로 연결을 시험합니다. 회사 계정 이름으로 인사가 나오면 성공입니다.
ssh -T git@github-work
IdentitiesOnly yes는 지정한 키만 제시하라는 뜻이라, 다른 키가 먼저 제시되는 문제를 막아줍니다. 윈도우 메모장으로 config를 만들 때는 저장 창에서 파일 형식을 모든 파일로 바꿔야 config.txt로 저장되지 않습니다.
해결 방법 5: Git이 쓰는 SSH 프로그램 맞추기
윈도우에서 ssh -T는 성공하는데 git push, VS Code, Cursor에서만 실패한다면 대부분 이 경우입니다. Git for Windows는 자체 SSH 프로그램을 함께 설치하는데, 이 프로그램은 해결 방법 3에서 설정한 윈도우의 ssh-agent 서비스를 쓰지 않습니다.
-
지금 Git이 어떤 SSH를 쓰도록 지정되어 있는지 확인합니다. 아무것도 나오지 않으면 Git 내장 SSH를 쓰는 중입니다.
git config --global --get core.sshCommand -
Git이 윈도우 기본 SSH를 쓰도록 지정합니다.
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe" -
VS Code나 Cursor를 완전히 종료했다가 다시 실행합니다.
-
다시
git push를 시도합니다. -
반대로 Git 내장 SSH를 계속 쓰고 싶다면 이 설정 대신 Git Bash에서
eval "$(ssh-agent -s)"와ssh-add로 키를 따로 올려야 합니다. 두 방식을 섞지 말고 하나로 정하는 편이 관리가 쉽습니다. -
Git for Windows를 다시 설치할 때는 설치 화면의 SSH 선택 단계에서 외부 OpenSSH를 쓰는 옵션을 고르면 같은 효과를 얻을 수 있습니다. 옵션 문구는 버전에 따라 다를 수 있습니다.
문제 해결이 안 될 경우 추가 점검 사항
- 회사망에서 22번 포트 차단:
Connection timed out이나port 22: Connection refused라면 키 문제가 아니라 방화벽 문제입니다. GitHub은 443번 포트로도 SSH를 받으므로, config의Host github.com항목에HostName ssh.github.com과Port 443두 줄을 넣고 다시 시험해보세요. - 맥·리눅스 키 파일 권한:
UNPROTECTED PRIVATE KEY FILE경고가 나오면chmod 600 ~/.ssh/id_ed25519로 개인키 권한을 본인만 읽을 수 있게 바꿉니다. - 인증은 되는데 저장소 접근이 거부됨:
Repository not found나Permission to 저장소 denied to 다른계정이 나오면 키는 정상이고, 그 계정에 저장소 권한이 없거나 다른 계정 키로 인증된 것입니다. 해결 방법 4를 확인하세요. - 조직의 SSO 정책: 회사 GitHub 조직이 SSO를 쓰면 [Settings > SSH and GPG keys]의 해당 키 옆에서 SSO 승인(Configure SSO)을 따로 해줘야 조직 저장소에 접근됩니다.
- GUI 클라이언트: SourceTree, GitHub Desktop 같은 프로그램은 자체 SSH·인증 설정을 따로 가지고 있습니다. 터미널에서는 되는데 이런 프로그램에서만 안 된다면 그 프로그램의 설정 화면에서 SSH 키 경로를 확인하세요.
자주 묻는 질문
ed25519와 RSA 중 어떤 키를 만들어야 하나요?
GitHub은 ed25519 키를 권장합니다. 접속하려는 서버가 오래되어 ed25519를 지원하지 않는 경우에만 ssh-keygen -t rsa -b 4096 명령으로 RSA 키를 만들면 됩니다.
패스프레이즈를 꼭 설정해야 하나요?
필수는 아니지만 권장합니다. 키 파일이 유출되더라도 패스프레이즈 없이는 사용할 수 없고, ssh-agent에 키를 올려두면 매번 입력하지 않아도 됩니다.
SSH 대신 HTTPS 주소로 바꾸면 안 되나요?
바꿔도 됩니다. 다만 GitHub은 Git 작업에 계정 비밀번호 인증을 받지 않으므로, HTTPS를 쓸 때는 개인 액세스 토큰이나 Git Credential Manager로 로그인해야 합니다.
GitLab이나 Bitbucket에서도 같은 방법으로 해결되나요?
원리는 같습니다. 각 서비스의 프로필 설정에 있는 SSH Keys 메뉴에 공개키를 등록하고, 연결 테스트 주소만 git@gitlab.com 또는 git@bitbucket.org로 바꾸면 됩니다.
이 문서는 2026년 10월 7일 기준으로 작성되었습니다. 운영체제 업데이트에 따라 메뉴 명칭과 위치가 달라질 수 있으며, 시스템 설정을 변경하기 전에는 중요한 데이터를 먼저 백업하시기 바랍니다.