핵심 요약
Permission denied (publickey)는 "서버가 너의 공개키를 인정하지 않는다"는 뜻이다. 원인은 대개 넷 중 하나 — ①클라이언트가 맞는 키를 안 보냄, ②키 파일 권한이 너무 열려 있음, ③서버 authorized_keys에 공개키 미등록, ④사용자명·경로 오타. ssh -v로 어느 키를 시도하는지부터 본다.
1. 먼저 상세 로그로 진단
ssh -v user@host
# "Offering public key: ~/.ssh/id_ed25519" 같은 줄 확인
# 어떤 키를 시도하고 서버가 거절하는지 보인다
2. 원인별 점검
| 원인 | 확인·해결 |
|---|---|
| 키 미지정 | ssh -i ~/.ssh/mykey user@host |
| 키 권한 과다 | private key는 chmod 600 |
| 서버 미등록 | 공개키를 서버 ~/.ssh/authorized_keys에 추가 |
| 사용자 오타 | ubuntu@·ec2-user@ 등 정확히 |
3. 권한이 핵심
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 # private key
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys # 서버 쪽
SSH는 키·디렉터리 권한이 느슨하면(다른 사용자가 읽을 수 있으면) 보안상 아예 무시한다. 이게 의외로 가장 흔한 원인이다.
4. 공개키 서버에 등록
# 가장 쉬운 방법
ssh-copy-id user@host
# 수동이면 공개키 내용을 서버 authorized_keys에 append
cat ~/.ssh/id_ed25519.pub | ssh user@host \
'cat >> ~/.ssh/authorized_keys'
5. 에이전트·설정 팁
- 키가 여러 개면
ssh-add ~/.ssh/mykey로 에이전트에 등록 ~/.ssh/config에 Host별IdentityFile을 지정하면 매번-i안 써도 됨- 서버가 비밀번호 인증을 껐다면 키 인증만 되므로 키 문제를 반드시 해결해야 함
자주 묻는 질문
ssh -v를 봐도 뭘 봐야 할지 모르겠어요.
"Offering public key"로 어떤 키를 보내는지, 그 뒤 서버가 "Authentications that can continue"로 무엇을 요구하는지 보세요. 원하는 키를 아예 안 보내면 -i로 지정, 보내는데 거절되면 서버 등록·권한 문제입니다.
권한을 600으로 했는데도 안 돼요.
~/.ssh 디렉터리 자체(700)와 서버의 authorized_keys(600), 그리고 홈 디렉터리가 그룹 쓰기 가능하지 않은지도 확인하세요. 서버 홈이 drwxrwxr-x처럼 그룹 쓰기가 열려 있으면 SSH가 거부합니다.
비밀번호로는 되는데 키로만 안 됩니다.
공개키가 서버 authorized_keys에 없거나 형식이 깨진 경우가 많습니다. ssh-copy-id로 다시 등록하고, 서버의 /var/log/auth.log에서 거절 사유(Authentication refused: bad ownership 등)를 확인하세요.

댓글 0