SSH 공개 키 거부 문제 해결

SSH 사용 시 '허용되지 않음 (공개 키)' 오류가 발생하셨나요? 이 가이드에서는 일반적인 인증 오류를 해결하기 위한 포괄적인 안내를 제공합니다. SSH 키 쌍을 꼼꼼하게 확인하고, 클라이언트와 서버 모두에서 잘못된 파일 권한을 진단하며, `authorized_keys` 파일이 올바르게 구성되었는지 확인하는 방법을 알아보세요. 실제 예제와 단계별 지침을 통해 원격 시스템에 안전하게 다시 액세스할 수 있습니다.

28 조회수

SSH '권한 거부됨 (publickey)' 오류 문제 해결

SSH를 통해 원격 서버에 연결하려고 할 때 "권한 거부됨 (publickey)" 오류가 발생하는 것은 좌절스러운 장애물이 될 수 있습니다. 이 오류는 서버가 공개 키를 사용하여 사용자를 인증할 수 없어 연결을 거부했음을 구체적으로 나타냅니다. 비밀번호 기반 인증과 달리 공개 키 암호화는 키 쌍에 의존합니다. 하나는 로컬 컴퓨터에 비밀로 보관되는 개인 키이고, 다른 하나는 서버에 배치되는 공개 키입니다. 이 가이드에서는 이 오류의 일반적인 원인을 살펴보고 진단 및 해결을 위한 자세한 단계를 제공하여 안전하고 원활한 SSH 액세스를 보장합니다.

SSH 공개 키 인증 프로세스를 이해하는 것은 효과적인 문제 해결에 매우 중요합니다. 연결을 시도하면 SSH 클라이언트가 공개 키를 서버에 제시합니다. 그러면 서버에서 해당 공개 키가 사용자 계정에 대해 승인되었는지 확인합니다. 승인된 경우 서버는 공개 키로 챌린지를 암호화하여 다시 보냅니다. 해당 개인 키를 보유한 클라이언트는 챌린지를 해독하여 서버로 응답을 다시 보냅니다. 응답이 올바르면 인증이 성공합니다. "권한 거부됨 (publickey)" 오류는 이 교환이 어느 시점에서 실패했음을 의미합니다.

'권한 거부됨 (publickey)'의 일반적인 원인

"권한 거부됨 (publickey)" 오류는 여러 구성 문제에서 비롯될 수 있습니다. 근본 원인을 식별하려면 일반적으로 다음 구성 요소를 체계적으로 확인해야 합니다.

  • 잘못된 파일 권한: SSH는 보안상의 이유로 파일 및 디렉터리 권한에 매우 민감합니다. 로컬 ~/.ssh 디렉터리, 개인 키 파일 또는 서버 측 ~/.ssh 디렉터리 및 authorized_keys 파일의 잘못된 권한은 인증을 방해할 수 있습니다.
  • authorized_keys 항목 누락 또는 잘못됨: 서버의 authorized_keys 파일에는 로그인하려는 사용자에 대한 올바른 공개 키가 포함되어야 합니다. 키가 누락되었거나, 잘못 형성되었거나, 잘못된 사용자와 연결된 경우 인증에 실패합니다.
  • 잘못된 키 쌍 연결: SSH 클라이언트가 잘못된 개인 키를 제공하고 있거나 서버의 authorized_keys 파일에 해당 공개 키가 나열되어 있지 않을 수 있습니다.
  • SSH 에이전트 문제: SSH 에이전트를 사용하는 경우 개인 키가 제대로 로드되지 않았거나 구성이 잘못되었을 수 있습니다.
  • 서버 측 SSH 구성: 이 특정 오류의 경우 드물지만 서버의 SSH 데몬 구성 (sshd_config)에 공개 키 인증에 대한 특정 제한이 있을 수 있습니다.

단계별 문제 해결 가이드

이러한 문제를 진단하고 수정하기 위한 실질적인 단계에 대해 자세히 알아보겠습니다.

1. 로컬 개인 키 및 권한 확인

로컬 SSH 구성이 가장 먼저 확인해야 할 곳입니다. 개인 키에 접근할 수 있고 올바른 권한이 있는지 확인하십시오.

개인 키 존재 여부 확인

개인 키는 일반적으로 ~/.ssh/id_rsa (또는 id_ed25519, id_dsa 등)에 위치합니다.

로컬 파일 권한 확인

~/.ssh 디렉터리와 개인 키 파일은 무단 액세스를 방지하기 위해 제한적인 권한을 가져야 합니다.

  • ~/.ssh 디렉터리: 700 (drwx------)이어야 합니다.
  • 개인 키 파일 (예: id_rsa): 600 (-rw-------)이어야 합니다.

올바른 권한을 설정하려면 chmod 명령을 사용하십시오:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

팁: 다른 키 이름을 사용하는 경우 id_rsa를 실제 개인 키 파일 이름으로 바꾸십시오.

2. 서버 측 authorized_keys 구성 확인

이것이 가장 흔한 원인입니다. 서버에는 로그인하려는 사용자에 대해 올바르게 나열된 공개 키가 있어야 합니다.

서버 액세스 (가능한 경우)

다른 방법 (예: 비밀번호 인증, 다른 사용자 계정 또는 콘솔)으로 서버에 액세스할 수 있는 경우 로그인하여 authorized_keys 파일을 확인하십시오.

authorized_keys 파일 위치 확인

authorized_keys 파일은 일반적으로 로그인하려는 사용자의 홈 디렉터리 내 ~/.ssh/authorized_keys에 있습니다.

서버 측 파일 권한 확인

클라이언트 측과 유사하게 서버 측 권한도 중요합니다.

  • 서버의 ~/.ssh 디렉터리: 700 (drwx------)이어야 합니다.
  • 서버의 authorized_keys 파일: 600 (-rw-------)이어야 합니다.

서버에서 이러한 권한이 올바르게 설정되었는지 확인하십시오.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
authorized_keys 내용 확인

텍스트 편집기 (예: nano, vim)를 사용하여 ~/.ssh/authorized_keys 파일을 엽니다. 각 공개 키는 한 줄에 있어야 합니다. 사용하려는 공개 키가 존재하고 올바르게 형식화되었는지 확인하십시오. ssh-rsa, ssh-ed25519 또는 이와 유사한 것으로 시작하고 긴 문자열과 선택적으로 주석이 뒤따라야 합니다.

예시 authorized_keys 항목:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD... your_public_key_string user@hostname

중요: authorized_keys에 개인 키를 추가하지 마십시오. 공개 키만 여기에 있어야 합니다.

3. 올바른 공개 키가 추가되었는지 확인

잘못된 공개 키가 복사되었거나 서버의 공개 키가 로컬 개인 키와 일치하지 않을 수 있습니다.

로컬 공개 키 검색

공개 키는 개인 키의 대응 항목입니다. ssh-keygen 명령을 사용하여 볼 수 있습니다.

cat ~/.ssh/id_rsa.pub

이 명령은 공개 키를 출력합니다. 이 출력을 서버의 ~/.ssh/authorized_keys 파일의 항목과 주의 깊게 비교하십시오. 단 하나의 오타나 누락된 문자라도 인증 실패의 원인이 됩니다.

팁: 서버에 비밀번호 액세스가 가능한 경우 ssh-copy-id를 사용하여 공개 키를 추가하는 빠른 방법이 있습니다.

ssh-copy-id user@your_server_ip

이 명령은 기본 공개 키 (~/.ssh/id_rsa.pub)를 원격 서버의 ~/.ssh/authorized_keys 파일에 자동으로 추가하고 올바른 권한을 설정합니다.

4. 올바른 개인 키 지정 (기본값이 아닌 경우)

기본값이 아닌 개인 키 (예: ~/.ssh/my_other_key)를 사용하는 경우 SSH 클라이언트에게 사용할 키를 알려야 합니다.

-i 플래그 사용

-i 옵션을 사용하여 식별 파일 (개인 키)을 지정할 수 있습니다.

ssh -i ~/.ssh/my_other_key user@your_server_ip
~/.ssh/config 구성

편의를 위해 특정 호스트에 대해 항상 특정 키를 사용하도록 SSH 클라이언트를 구성할 수 있습니다.

로컬 컴퓨터에서 ~/.ssh/config 파일을 만들거나 편집하고 다음과 같은 항목을 추가하십시오.

Host your_server_alias
  HostName your_server_ip_or_domain
  User your_username
  IdentityFile ~/.ssh/my_other_key

그러면 간단히 다음을 사용하여 연결할 수 있습니다.

ssh your_server_alias

5. SSH 에이전트 상태 확인

키 관리를 위해 SSH 에이전트에 의존하는 경우 실행 중이고 키가 로드되었는지 확인하십시오.

에이전트 실행 여부 확인
echo "$SSH_AUTH_SOCK"

이것이 경로를 출력하면 에이전트가 실행 중일 가능성이 높습니다. 비어 있으면 에이전트를 시작해야 할 수 있습니다.

에이전트에 키 추가

키가 로드되지 않은 경우 추가하십시오.

ssh-add ~/.ssh/id_rsa

암호 구문을 묻는 메시지가 표시되면 입력합니다. ssh-add -l로 추가된 키를 확인할 수 있습니다.

6. 상세 모드를 사용한 디버깅

SSH에는 상세 모드 (-v, -vv, 또는 자세한 수준을 높이려면 -vvv)가 있어 인증 프로세스가 실패하는 위치에 대한 귀중한 단서를 제공할 수 있습니다.

ssh -vvv user@your_server_ip

키 인증, 키 제공 및 서버 응답과 관련된 메시지에 대한 출력을 검토하십시오. 종종 이것이 직접적인 문제를 가리킵니다.

공개 키 실패를 나타내는 상세 출력 스니펫 예시:

debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/id_rsa
debug1: read PEM private key file /home/user/.ssh/id_rsa
debug1: failed to use sshkey: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: password

이 출력은 클라이언트가 id_rsa를 사용하려고 시도했지만 실패한 다음 다른 방법으로 진행했음을 나타낼 수 있습니다.

7. 서버 측 sshd_config 검토 (고급)

publickey 특정 오류의 경우 드물지만 서버의 SSH 데몬 구성 파일 (/etc/ssh/sshd_config)에 대한 검토는 가치가 있습니다. PubkeyAuthentication yes가 주석 처리되지 않고 yes로 설정되었는지 확인하십시오. 변경 사항을 적용한 후 SSH 서비스를 다시 로드하거나 다시 시작해야 합니다 (예: sudo systemctl reload sshd 또는 sudo systemctl restart sshd).

요약 및 모범 사례

SSH "권한 거부됨 (publickey)" 오류 문제 해결은 클라이언트 및 서버 구성 모두에 대한 체계적인 검사를 포함합니다. 가장 빈번한 원인은 ~/.sshauthorized_keys 파일의 잘못된 파일 권한과 서버의 공개 키와 클라이언트의 개인 키 간의 불일치와 관련이 있습니다.

주요 내용:

  • 권한이 가장 중요합니다: 항상 클라이언트와 서버 모두에서 ~/.ssh700이고 개인 키/authorized_keys600인지 확인하십시오.
  • 공개 키 정확성: 서버의 authorized_keys 파일에 정확한 공개 키가 있는지 다시 확인하십시오.
  • ssh-copy-id 사용: 가능한 경우 공개 키 인증을 설정하는 가장 안전하고 쉬운 방법입니다.
  • 상세 모드: 상세 진단 출력을 위해 ssh -vvv를 활용하십시오.

이 단계를 따르면 대부분의 "권한 거부됨 (publickey)" 문제를 진단하고 해결하여 서버에 대한 안전한 원격 액세스를 복원할 수 있습니다.