문제 상황
Windows 운영체제의 cmd.exe를 통해 로컬에 존재하는 파일을 AWS EC2 인스턴스로 전송을 시도하였으나, 다음과 같이 Permission denied 오류가 발생했습니다. 우선 제가 사용한 명령어는 다음과 같습니다.
scp -i .\keypair-tokyo.pem -r .\aws.zip ec2-user@54.168.234.54:~
실행 결과 다음과 같이 key file의 권한이 너무 열려있다고 나옵니다. Linux에서는 chmod 명령으로 간단하게 600 혹은 400 권한을 부여하여 해결하였지만, Windows 에서는 chmod 바이너리가 없어 난감합니다. 이러한 경우 사용할 수 있는 icacls 라는 도구를 소개해드리겠습니다.
해결
icacls는 지정된 파일의 DACL(임의 액세스 제어 목록)을 표시 또는 수정하고 저장한 DACL을 지정된 디렉터리의 파일에 적용합니다.[1] 쉽게 말해 Windows 운영체제 내에서 chmod처럼 파일의 액세스 권한을 제어할 수 있는 바이너리입니다.
다음과 같이 3번의 명령을 수행하여 키 파일의 권한 문제로 인한 Permission denied 오류를 해결할 수 있습니다. 아래 명령에서 .\keypair-test.pem 대신 권한을 수정할 키 파일의 경로를 지정합니다.
icacls.exe .\keypair-test.pem /reset
icacls.exe .\keypair-test.pem /GRANT:R "$($env:USERNAME):(R)"
icacls.exe .\keypair-test.pem /inheritance:r
성공적으로 수행이 된다면 다음과 같은 출력이 화면에 나타납니다.
결과
icacls로 키 파일의 권한을 초기화한 다음, 키 파일을 사용하면 정상적으로 ssh 혹은 scp와 같은 명령이 잘 수행됨을 확인할 수 있습니다.
참고자료
[1] https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/icacls
댓글