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:r의 r은 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 서버든 키 권한 문제로 막힐 일이 없을 것이다.
'여러가지 > Window 10 & 11' 카테고리의 다른 글
| 윈도우11 설치할 때 MS 계정 로그인 건너뛰는 법 (로컬계정 설치) (0) | 2026.03.25 |
|---|---|
| 윈도우(Windows) CUDA 설치하고 파이썬(PyTorch)에서 GPU 사용하는 법 (0) | 2025.09.09 |
| [Window 10 & 11] 윈도우 설치 날짜 및 컴퓨터 켜진 시간 확인하기(부트시간) (0) | 2025.03.19 |
| [Window 10 & 11] 윈도우에서 특정 포트 프로세스를 종료하는 쉬운 방법 (1) | 2024.09.13 |
| [Window 10 & 11] 터미널에서 ssh 로 다른 서버 접속 시 에러 날 때 !! (WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!) (0) | 2024.07.12 |
댓글