문제해결

WARNING: UNPROTECTED PRIVATE KEY FILE! 문제 해결

WARNING: UNPROTECTED PRIVATE KEY FILE! 문제


서버-서버 간의 SSH 접속을 위해 다음 명령어를 사용하여 접속을 시도하게 됩니다.

[user@localhost ~]$ ssh myaccount@192.168.##.11 -i /home/user/myprivatekey

 

여기서 myprivatekey 라는 파일명의 개인 키접속할 서버에 대해 공개 키 인증을 시도할 때 다음 에러 메세지가 발생하면서 인증 시도에 실패하는 문제가 나타날 수 있습니다.

The authenticity of host '[192.168.###.10]:22 ([192.168.###.11]:22)' can't be established.
ECDSA key fingerprint is SHA256:wqbG1vk2nvoxjztuiajvDnmwq/vs/bJNFmwnaxf2VXY.
ECDSA key fingerprint is MD5:5f:5b:00:00:00:30:d1:1e:00:00:00:00:00:00:00:00.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.###.11]:22' (ECDSA) to the list of known hosts.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0744 for '/home/user/myprivatekey' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/user/myprivatekey": bad permissions
Permission denied (publickey).

192.168.###.10 서버에서 192.168.###.11 서버로 접속하면서 /home/user/ 디렉토리에 있는 myprivatekey 파일을 참조하려 했습니다.

여기서 myprivatekey 파일은 OpenSSH 형식의 개인 키(Private Key) 파일이며 파일 자체에는 별다른 문제가 없습니다.

그러나 OpenSSH 클라이언트‘보호되지 않은 개인 키 파일’ 이라는 오류를 출력하게 되었는데요.

 

문제 원인과 해결 방법


이 문제는 다름아닌 개인 키 파일의 권한에 대한 잘못된 설정으로 발생하는 경고이자 오류 메세지입니다.

위 에러에서 확인 되는 myprivatekey 파일의 권한은 744(rwxr--r--)이며 이는 파일의 소유자 외에 그룹과 기타 사용자에게 읽기 권한을 부여한다는 것입니다. 이렇게 되면 보안 문제가 발생할 수 있으므로 소유자가 아니면 읽지도 쓰지도 못하도록 권한을 변경해주어야 합니다.

 

다음과 같이 chmod 명령어를 실행하여 myprivatekey 파일의 권한을 700(rwx------) 또는 600(rw-------)으로 변경해줍니다. 600으로 변경해도 인증에 큰 지장이 없으므로 가능하면 권한을 최소한으로 설정합니다.

[user@localhost ~]$ chmod 600 myprivatekey

 

이제 상단의 SSH 접속 명령어를 다시 사용하여 인증을 다시 시도합니다. 더 이상 보호되지 않은 키 파일 경고 메세지가 발생하지 않을 것입니다.

 

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

1개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

1개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

1개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

1개월 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago