본문 바로가기
여러가지/Window 10 & 11

Windows에서 SSH 접속 시 "UNPROTECTED PRIVATE KEY FILE" 에러 해결하기

by 포스트it 2026. 5. 26.
반응형

Windows PC에서 AWS EC2(Ubuntu 서버 등)에 SSH로 접속하려고 할 때, 분명히 키 파일 경로도 맞고 IP 주소도 맞는데 아래와 같은 에러가 뜨면서 접속이 거부되는 경우가 있다.

문제 상황

PowerShell 또는 cmd 창에서 다음과 같은 SSH 명령을 실행했다.

ssh -i "C:\Users\<사용자명>\keys\<키파일명>.pem" ubuntu@<서버IP>

그런데 돌아오는 응답은 다음과 같다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '...\\<키파일명>.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "...\\<키파일명>.pem": bad permissions
ubuntu@<서버IP>: Permission denied (publickey).

OpenSSH는 보안상 개인 키 파일을 소유자 외의 다른 사용자가 접근할 수 있으면 해당 키의 사용을 거부한다. Linux/macOS에서는 chmod 400으로 해결하지만, Windows에서는 NTFS 권한 모델이 달라서 별도의 처리가 필요하다.

원인: 왜 이런 일이 생길까?

Windows에서 키 파일을 다운로드하거나 새로 만들면 부모 폴더의 권한을 그대로 상속받는다. 이 때문에 Authenticated Users, BUILTIN\Users, 혹은 시스템에서 자동으로 생성된 보조 계정 등 여러 사용자/그룹이 해당 파일에 접근 권한을 가지게 된다.

위 그림의 왼쪽처럼 본인 외에도 여러 계정이 키 파일을 들여다볼 수 있는 상태가 되는데, OpenSSH는 이런 상태를 "너무 개방되어 있다(too open)"고 판단하고 키를 무시한다. 우리가 원하는 건 오른쪽처럼 오직 본인 계정만 읽을 수 있는 상태다.

해결 방법: 한 줄 명령어

PowerShell을 열고 아래 한 줄을 실행하면 끝난다. (관리자 권한은 필요 없음)

icacls "키파일경로" /inheritance:r /grant:r "%USERNAME%:(R)"

명령어의 각 부분이 하는 일



이 명령은 짧지만 안에 네 가지 의미가 압축되어 있다.

먼저 icacls는 Windows의 NTFS 파일 권한을 관리하는 기본 내장 명령어다. Linux의 chmod에 해당한다고 보면 된다.

그 다음 "키파일경로"는 권한을 변경할 대상 파일이다. 경로에 공백이 들어갈 수 있으니 반드시 큰따옴표로 감싸 주는 것이 좋다.

/inheritance:r 옵션은 부모 폴더로부터 상속받은 모든 권한을 제거한다(r은 reset/remove를 의미). 이 한 번의 동작으로 자동으로 따라붙은 모든 사용자·그룹의 권한이 한꺼번에 사라진다.

마지막으로 /grant:r "%USERNAME%:(R)" 옵션은 기존 권한을 대체하면서(/grant:rr은 replace) 현재 로그인한 본인 계정에만 읽기(R) 권한을 부여한다. %USERNAME%은 Windows 환경 변수로, 자동으로 현재 사용자 이름이 들어가기 때문에 사용자명을 직접 입력할 필요가 없다. 즉, 이 명령은 누구의 PC에 복사해 붙여 넣어도 그대로 동작한다.

권한이 제대로 적용됐는지 확인

명령 실행 후, 아래 명령으로 권한 상태를 확인할 수 있다.

icacls "키파일경로"

결과에 본인 계정 하나만 (R) 권한으로 표시되면 성공이다.

키파일경로 컴퓨터명\사용자명:(R)

다시 SSH 접속 시도

이제 원래 명령으로 다시 접속하면 정상적으로 서버에 들어갈 수 있다.

ssh -i "키파일경로" ubuntu@<서버IP>

만약 여전히 같은 에러가 난다면

드물게 위 명령으로도 해결되지 않는 경우가 있는데, 보통은 키 파일이 OneDrive 동기화 폴더나 회사에서 관리하는 특수 경로에 있어서 그렇다. 이런 경우에는 키 파일을 C:\Users\사용자명\.ssh\ 폴더로 옮긴 뒤 동일한 권한 조정 명령을 다시 실행해 보면 대부분 해결된다.

또 다른 케이스로, 키 파일에 시스템 보조 계정(예: 가상 환경이나 보안 솔루션이 만든 계정)이 명시적으로 권한을 가지고 있는 경우에는 /inheritance:r만으로 안 지워질 수 있다. 이때는 다음과 같이 명시적으로 제거할 수 있다.

icacls "키파일경로" /remove "해당계정명"

정리

Windows에서 SSH 키 권한 문제는 처음 겪으면 당황스럽지만, 본질은 단순하다. "본인 외에는 아무도 키 파일을 못 보게 만들어라"는 것. 이걸 한 줄 명령으로 해결할 수 있다는 점만 기억해 두면 다음번에 같은 에러를 만나도 30초 안에 해결할 수 있다.

icacls "키파일경로" /inheritance:r /grant:r "%USERNAME%:(R)"

이 명령어 하나를 즐겨찾기나 메모장에 저장해 두면 EC2든, 다른 어떤 SSH 서버든 키 권한 문제로 막힐 일이 없을 것이다.

728x90
반응형

댓글