Permission denied publickey 오류가 여러 계정에서 나는 이유

GitHub에서 개인 계정과 회사 계정을 함께 쓰다 보면 SSH 키를 등록했는데도 아래 오류가 뜨는 경우가 있습니다.


git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

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

이 오류는 단순히 SSH 키가 없어서만 발생하지 않습니다. 여러 GitHub 계정을 한 컴퓨터에서 사용할 때는 SSH가 어떤 키를 GitHub에 제시하는지, 로컬 저장소의 remote URL이 어떤 Host를 가리키는지, 해당 키가 어느 GitHub 계정에 등록되어 있는지가 모두 맞아야 합니다.


특히 ssh -T git@github.com은 성공하는데 git push만 실패한다면, 키 자체보다 ~/.ssh/configgit remote -v 설정이 어긋났을 가능성이 큽니다.


GitHub 개인 계정과 회사 계정 SSH 키를 분리해 Permission denied publickey 오류를 해결하는 흐름

개인 계정과 회사 계정은 SSH 키, Host alias, remote URL을 함께 분리해야 합니다.


먼저 확인할 증상별 원인

증상 가능성이 높은 원인 확인 명령어
개인 저장소는 되는데 회사 저장소만 실패 회사 계정 키가 아닌 개인 계정 키로 접속 중 ssh -T git@github.com-work
ssh -T는 성공하지만 git push 실패 remote URL이 Host alias를 쓰지 않음 git remote -v
GitHub에 키 추가 시 Key already in use 표시 같은 공개키가 다른 계정이나 deploy key에 이미 등록됨 ssh -T -i ~/.ssh/id_ed25519_work git@github.com
VSCode Source Control에서만 push 실패 VSCode 문제가 아니라 저장소 remote URL 문제 git remote -v

해결 순서 요약

여러 계정을 한 컴퓨터에서 쓸 때는 아래 순서로 맞추면 됩니다. 핵심은 개인 계정과 회사 계정에 서로 다른 SSH 키를 만들고, ~/.ssh/config에서 Host alias를 나눈 뒤, 저장소 remote URL도 그 alias를 사용하게 바꾸는 것입니다.


  1. 개인용 SSH 키와 회사용 SSH 키를 각각 만든다.
  2. 각 공개키를 맞는 GitHub 계정에 등록한다.
  3. ~/.ssh/configgithub.com-personal, github.com-work 같은 Host alias를 만든다.
  4. ssh -T로 각각 어떤 계정으로 인증되는지 확인한다.
  5. 로컬 저장소의 origin URL을 Host alias 형식으로 바꾼다.

1단계: 계정별 SSH 키 만들기

이미 기본 SSH 키가 있더라도 개인·회사 계정을 분리하려면 파일명을 다르게 만드는 것이 좋습니다. 예시는 개인 계정용 id_ed25519_personal, 회사 계정용 id_ed25519_work로 나눕니다.


Mac·Linux·WSL

mkdir -p ~/.ssh

ssh-keygen -t ed25519 -C "personal-email@example.com" -f ~/.ssh/id_ed25519_personal

ssh-keygen -t ed25519 -C "work-email@example.com" -f ~/.ssh/id_ed25519_work

Windows PowerShell

New-Item -ItemType Directory -Force $env:USERPROFILE\.ssh

ssh-keygen -t ed25519 -C "personal-email@example.com" -f $env:USERPROFILE\.ssh\id_ed25519_personal

ssh-keygen -t ed25519 -C "work-email@example.com" -f $env:USERPROFILE\.ssh\id_ed25519_work

중간에 passphrase를 물어보면 입력해도 되고 비워도 됩니다. 업무용 키라면 passphrase를 설정하고 ssh-agent에 등록해 반복 입력을 줄이는 방식이 더 안전합니다.


2단계: ssh-agent에 키 등록하기

SSH 키 파일을 만들었더라도 ssh-agent가 해당 키를 기억하지 못하면 인증 과정에서 원하는 키가 선택되지 않을 수 있습니다. 계정별 키를 모두 등록합니다.


Mac·Linux·WSL

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_ed25519_personal
ssh-add ~/.ssh/id_ed25519_work

ssh-add -l

Windows PowerShell

아래 명령은 관리자 권한 PowerShell에서 실행하는 편이 안전합니다. 이후 ssh-add는 일반 PowerShell이나 Git Bash에서 실행해도 됩니다.


Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

ssh-add $env:USERPROFILE\.ssh\id_ed25519_personal
ssh-add $env:USERPROFILE\.ssh\id_ed25519_work

ssh-add -l

3단계: GitHub 계정에 공개키 등록하기

GitHub에는 개인키가 아니라 .pub로 끝나는 공개키를 등록해야 합니다. 개인 계정에는 개인용 공개키를, 회사 계정에는 회사용 공개키를 각각 등록합니다.


공개키 복사 명령어

# Mac
pbcopy < ~/.ssh/id_ed25519_personal.pub

# Linux 또는 WSL
cat ~/.ssh/id_ed25519_personal.pub

# Windows PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519_personal.pub | Set-Clipboard

회사 계정용 키를 복사할 때는 파일명만 바꿉니다.


# Mac
pbcopy < ~/.ssh/id_ed25519_work.pub

# Linux 또는 WSL
cat ~/.ssh/id_ed25519_work.pub

# Windows PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519_work.pub | Set-Clipboard

GitHub 화면에서는 프로필 아이콘을 누른 뒤 Settings → SSH and GPG keys → New SSH key로 이동해 공개키를 붙여 넣습니다. 같은 공개키를 두 계정에 중복 등록하려고 하면 Key already in use 오류가 날 수 있으므로 계정별로 반드시 다른 키를 사용합니다.


4단계: ~/.ssh/config에서 Host alias 나누기

여러 계정 오류 해결의 핵심은 이 단계입니다. GitHub 서버는 둘 다 github.com이지만, 로컬 SSH 설정에서는 개인 계정용 Host와 회사 계정용 Host를 다르게 부릅니다.


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

Host github.com-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work
  IdentitiesOnly yes

Host는 로컬에서만 쓰는 별명이고, HostName은 실제 접속할 서버입니다. 따라서 github.com-personalgithub.com-work는 둘 다 실제로는 github.com에 접속하지만 서로 다른 키를 사용합니다.


IdentitiesOnly yes는 ssh-agent에 여러 키가 올라가 있을 때도 해당 Host에 지정된 키만 사용하도록 제한합니다. 이 줄이 없으면 SSH가 여러 키를 순서대로 제시하다가 의도하지 않은 계정으로 인증될 수 있습니다.


5단계: SSH 연결 테스트하기

설정이 끝났다면 각 Host alias가 어떤 GitHub 계정으로 인증되는지 확인합니다.


ssh -T git@github.com-personal

ssh -T git@github.com-work

정상이라면 아래처럼 계정명이 표시됩니다. GitHub는 SSH 접속으로 셸을 제공하지 않기 때문에 “shell access” 문구가 나와도 인증 자체는 성공입니다.


Hi PERSONAL_USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

Hi WORK_USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

여전히 실패한다면 -vT 옵션으로 어떤 키를 사용하려는지 확인합니다.


ssh -vT git@github.com-work

출력 중 Offering public key 또는 identity file 근처에 id_ed25519_work가 보이지 않는다면 ~/.ssh/config 경로나 들여쓰기, 파일명이 틀렸을 가능성이 있습니다.


6단계: 저장소 remote URL을 Host alias로 바꾸기

ssh -T가 성공해도 로컬 저장소 remote URL이 여전히 git@github.com:OWNER/REPO.git이면 Git은 기본 github.com 설정을 사용합니다. 여러 계정 분리에서는 remote URL도 Host alias로 바꿔야 합니다.


현재 remote 확인

git remote -v

예를 들어 회사 저장소인데 아래처럼 되어 있다면 Host alias를 쓰지 않는 상태입니다.


origin  git@github.com:WORK_ORG/PROJECT.git (fetch)
origin  git@github.com:WORK_ORG/PROJECT.git (push)

개인 저장소 remote URL

git remote set-url origin git@github.com-personal:PERSONAL_USERNAME/REPOSITORY.git

회사 저장소 remote URL

git remote set-url origin git@github.com-work:WORK_ORG/REPOSITORY.git

변경 확인

git remote -v

회사 저장소라면 아래처럼 github.com-work가 보여야 합니다.


origin  git@github.com-work:WORK_ORG/REPOSITORY.git (fetch)
origin  git@github.com-work:WORK_ORG/REPOSITORY.git (push)

이제 다시 push를 시도합니다.


git push origin main

Windows·Mac·Linux에서 다른 점

환경 SSH 설정 파일 위치 주의할 점
Mac ~/.ssh/config 키체인에 passphrase를 저장하는 설정과 ssh-agent 설정이 함께 작동할 수 있습니다.
Windows PowerShell C:\Users\사용자명\.ssh\config OpenSSH agent 서비스가 꺼져 있으면 ssh-add가 실패할 수 있습니다.
Git Bash ~/.ssh/config PowerShell과 같은 Windows 사용자 폴더를 보지만, 경로 표기 방식이 다를 수 있습니다.
WSL /home/사용자명/.ssh/config Windows의 C:\Users\... 아래 SSH 키와 별개로 관리되는 경우가 많습니다.
Linux ~/.ssh/config 파일 권한이 너무 열려 있으면 SSH가 설정 파일이나 키 파일을 무시할 수 있습니다.

파일 권한도 함께 확인하기

Mac, Linux, WSL에서는 SSH 파일 권한이 너무 넓게 열려 있으면 키를 사용하지 못할 수 있습니다. 권한 문제가 의심되면 아래처럼 정리합니다.


chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_ed25519_personal
chmod 600 ~/.ssh/id_ed25519_work
chmod 644 ~/.ssh/id_ed25519_personal.pub
chmod 644 ~/.ssh/id_ed25519_work.pub

Windows에서는 일반적으로 chmod보다 사용자 폴더 권한과 OpenSSH agent 실행 상태를 먼저 확인하는 편이 좋습니다.


재발 방지 설정

저장소를 clone할 때부터 alias를 사용하기

처음 clone할 때부터 계정별 Host alias를 쓰면 나중에 remote URL을 다시 바꿀 일이 줄어듭니다.


# 개인 계정 저장소
git clone git@github.com-personal:PERSONAL_USERNAME/REPOSITORY.git

# 회사 계정 저장소
git clone git@github.com-work:WORK_ORG/REPOSITORY.git

저장소별 Git 사용자 정보도 분리하기

SSH 인증은 “어떤 계정으로 GitHub에 접속할지”를 정하는 설정이고, Git 사용자 정보는 “커밋에 어떤 이름과 이메일을 남길지”를 정하는 설정입니다. 둘은 다르므로 저장소별로 함께 확인하는 것이 좋습니다.


# 개인 저장소에서
git config user.name "Personal Name"
git config user.email "personal-email@example.com"

# 회사 저장소에서
git config user.name "Work Name"
git config user.email "work-email@example.com"

# 현재 저장소 설정 확인
git config user.name
git config user.email

자주 쓰는 점검 명령어

목적 명령어
등록된 키 목록 확인 ssh-add -l
개인 계정 SSH 테스트 ssh -T git@github.com-personal
회사 계정 SSH 테스트 ssh -T git@github.com-work
사용되는 키 상세 확인 ssh -vT git@github.com-work
저장소 remote 확인 git remote -v
remote URL 변경 git remote set-url origin git@github.com-work:ORG/REPO.git

공식 자료로 더 확인하기

GitHub SSH 키 생성, 공개키 등록, 여러 계정 사용 방식은 GitHub 정책과 클라이언트 환경에 따라 달라질 수 있습니다. 키를 새로 만들거나 회사 계정에 등록하기 전에는 공식 문서에서 현재 권장 절차를 함께 확인하는 것이 좋습니다.


GitHub SSH 키 생성과 ssh-agent 등록

새 SSH 키를 만드는 방법, passphrase 사용 기준, ssh-agent에 키를 등록하는 기본 절차를 확인할 수 있습니다.

GitHub 계정에 새 SSH 키 추가 방법 확인하기

GitHub 계정에 SSH 공개키 추가

로컬에서 만든 공개키를 GitHub 계정에 등록하는 절차와 인증용 SSH 키 등록 시 주의할 점을 확인할 수 있습니다.

GitHub 계정에 새 SSH 키 추가 방법 확인하기

GitHub 여러 계정에서 SSH 키 사용

한 컴퓨터에서 여러 GitHub 계정에 기여할 때 올바른 SSH 키를 선택하는 방식과 저장소별 인증 기준을 확인할 수 있습니다.

GitHub 여러 계정 관리와 SSH 키 사용 기준 확인하기

함께 보면 좋은 글

GitHub SSH 기본 설정부터 다시 확인하기
여러 계정 문제가 아니라 SSH 키 생성, 공개키 등록, push 권한 자체가 처음부터 불안정하다면 기본 설정을 먼저 점검하는 것이 좋습니다.
GitHub SSH Key 세팅 2026: 비밀번호 없이 push/pull 하는 법

VSCode에서 Git push 흐름 점검하기
SSH 인증은 성공했지만 VSCode에서 커밋, push, 브랜치 작업이 헷갈린다면 Git 기본 흐름을 함께 확인하면 원인을 더 빨리 좁힐 수 있습니다.
VSCode Git 입문 2026: 커밋·푸시·브랜치·충돌 해결 기본기

자주 묻는 질문

Q1. SSH 키 하나를 개인 계정과 회사 계정에 같이 등록해도 되나요?

권장하지 않습니다. 같은 공개키를 여러 계정에 함께 쓰면 어느 계정으로 인증되는지 헷갈리기 쉽고, 이미 다른 계정이나 deploy key에 등록된 키는 추가가 막힐 수 있습니다. 개인 계정과 회사 계정은 서로 다른 SSH 키를 만들고 각각의 GitHub 계정에 따로 등록하는 방식이 안전합니다.


Q2. ssh -T git@github.com은 성공하는데 git push는 왜 실패하나요?

ssh -T git@github.com은 기본 GitHub Host로 인증을 테스트합니다. 여러 계정을 분리한 경우에는 저장소의 remote URL이 github.com-workgithub.com-personal 같은 Host alias를 사용해야 합니다. 먼저 git remote -v로 현재 push 주소를 확인하는 것이 좋습니다.


Q3. HTTPS로 바꾸면 Permission denied publickey 오류가 사라지나요?

HTTPS 주소로 바꾸면 SSH 키 인증을 쓰지 않으므로 publickey 오류는 피할 수 있습니다. 다만 개인 계정과 회사 계정을 자주 오가며 push한다면 SSH Host alias 방식이 더 명확합니다. HTTPS를 사용할 때도 계정, 토큰, credential helper가 섞이지 않도록 관리해야 합니다.


Q4. VSCode에서만 GitHub push가 실패하면 VSCode 설정 문제인가요?

대부분은 VSCode 자체 문제보다 로컬 저장소의 remote URL이나 SSH 키 선택 문제입니다. VSCode Source Control도 내부적으로 Git 명령을 사용하므로 터미널에서 git remote -v, ssh -T git@github.com-work, git push origin main 순서로 먼저 확인하는 것이 좋습니다.


Q5. 회사 저장소 clone 주소는 어떻게 써야 하나요?

GitHub 웹 화면에서 복사한 기본 SSH 주소는 보통 git@github.com:ORG/REPO.git 형식입니다. 여러 계정을 분리했다면 로컬에서는 git@github.com-work:ORG/REPO.git처럼 Host alias를 넣어 clone하거나 remote URL을 변경하면 됩니다.


GitHub SSH 여러 계정 오류는 키를 새로 만드는 것보다, 계정별 Host alias와 remote URL이 같은 방향을 가리키는지 확인하는 것이 핵심입니다.