Development/Daily Error

SCP 사용중 Permission denied 대처법

📝 작성 : 2022.06.21  ⏱ 수정 : 
반응형

Intro

모두 알고 계시는 것 처럼 리눅스에서 scp 명령어를 사용하면 손쉽게 remote 저장소에 있는 파일을 로컬에 copy 해 올 수 있습니다.

그런데 대부분의 상황에서 문제 없이 작동하는 이 기능에서도 어쩔 수 없이 Permission denied 에러를 뿜으며 안될 때가 있습니다.

image-20220621174415924

scp: Documents/root_file: Permission denied

이때의 대처법을 나누어 보려고 합니다.

원인

원인은 방금의 SCP 접근이 해당 파일에 대한 접근 권한을 가지고 있지 않기 때문입니다.

sudo 권한을 가지고 있는 유저라고 하더라도 ssh 로 접속해서 sudo 명령어로 해당 파일에 접근하는건 가능 하지만, scp로 한번에 빼오는건 불가능 합니다.

해결

상황은 매우 당황스럽지만 어렵지 않은 두가지 해결책이 있습니다.

1. 권한 변경

첫번째 해결책은 권한 변경입니다. ssh 로 접속해 해당 파일이 있는 경로를 찾아 들어 간 뒤에 권한을 변경 해 주고나면 scp로 해당 파일을 복사 할 수 있습니다.

ssh asus

image-20220621175039146

sudo chmod 777 Documents/root_file

image-20220621175115673

ls -al Documents/

image-20220621175205181

scp asus:Documents/root_file .

image-20220621175228726

파일 복사 성공

하지만, 섣불리 권한을 변경하기 어려운 경우도 많습니다. 특히 운영중인 서버에서 특정 파일을 가져온다거나 할 때가 그렇습니다. 게다가 중간 경로가 많다면 일괄 변경할 수도 없고 참 복잡해집니다.

2. 파일 복사

이럴때는 단순하지만 가장 좋은 방법인 "해당 파일을 접근 가능한 곳에 복제" 를 택하면 됩니다.

먼저 SSH 서버에 접속 하고

ssh asus

파일을 확인 해 보면 권한이 000으로 되어 있습니다.

ls -al Documents/

image-20220621175457960

권한과 소유자가 철벽 수준입니다.

이제 접근 가능한 경로에 파일을 복사 해주고

sudo cp Documents/root_file /tmp

image-20220621175550564

해당 파일의 권한을 변경 해 줍니다.

sudo chmod 777 /tmp/root_file
sudo chown $USER:$USER /tmp/root_file

그러고 나서 이제 다시 확인 해 보면

ls -al /tmp

image-20220621175802227

접근 권한 및 소유자가 변경 되었습니다. 소유자는 변경 하지 않아도 복사 할 수 있습니다.

이제 복사 한 파일을 scp로 copy 해 옵니다.

scp asus:/tmp/root_file .

image-20220621180348143

문제 없이 파일을 복사 해 왔습니다.

개인적으로는 파일을 임시폴더에 복사 해서 해결하는 방법을 추천합니다. 기존 시스템에 아무런 영향을 주지 않고도 Permission Denied를 해결 할 수 있습니다.

이상입니다.

반응형