Intro
모두 알고 계시는 것 처럼 리눅스에서 scp 명령어를 사용하면 손쉽게 remote 저장소에 있는 파일을 로컬에 copy 해 올 수 있습니다.
그런데 대부분의 상황에서 문제 없이 작동하는 이 기능에서도 어쩔 수 없이 Permission denied
에러를 뿜으며 안될 때가 있습니다.
scp: Documents/root_file: Permission denied
이때의 대처법을 나누어 보려고 합니다.
원인
원인은 방금의 SCP 접근이 해당 파일에 대한 접근 권한을 가지고 있지 않기 때문입니다.
sudo 권한을 가지고 있는 유저라고 하더라도 ssh 로 접속해서 sudo 명령어로 해당 파일에 접근하는건 가능 하지만, scp로 한번에 빼오는건 불가능 합니다.
해결
상황은 매우 당황스럽지만 어렵지 않은 두가지 해결책이 있습니다.
1. 권한 변경
첫번째 해결책은 권한 변경입니다. ssh 로 접속해 해당 파일이 있는 경로를 찾아 들어 간 뒤에 권한을 변경 해 주고나면 scp로 해당 파일을 복사 할 수 있습니다.
ssh asus
sudo chmod 777 Documents/root_file
ls -al Documents/
scp asus:Documents/root_file .
파일 복사 성공
하지만, 섣불리 권한을 변경하기 어려운 경우도 많습니다. 특히 운영중인 서버에서 특정 파일을 가져온다거나 할 때가 그렇습니다. 게다가 중간 경로가 많다면 일괄 변경할 수도 없고 참 복잡해집니다.
2. 파일 복사
이럴때는 단순하지만 가장 좋은 방법인 "해당 파일을 접근 가능한 곳에 복제" 를 택하면 됩니다.
먼저 SSH 서버에 접속 하고
ssh asus
파일을 확인 해 보면 권한이 000으로 되어 있습니다.
ls -al Documents/
권한과 소유자가 철벽 수준입니다.
이제 접근 가능한 경로에 파일을 복사 해주고
sudo cp Documents/root_file /tmp
해당 파일의 권한을 변경 해 줍니다.
sudo chmod 777 /tmp/root_file
sudo chown $USER:$USER /tmp/root_file
그러고 나서 이제 다시 확인 해 보면
ls -al /tmp
접근 권한 및 소유자가 변경 되었습니다. 소유자는 변경 하지 않아도 복사 할 수 있습니다.
이제 복사 한 파일을 scp로 copy 해 옵니다.
scp asus:/tmp/root_file .
문제 없이 파일을 복사 해 왔습니다.
개인적으로는 파일을 임시폴더에 복사 해서 해결하는 방법을 추천합니다. 기존 시스템에 아무런 영향을 주지 않고도 Permission Denied를 해결 할 수 있습니다.
이상입니다.
'Development > Daily Error' 카테고리의 다른 글
[JPA] No Dialect mapping for JDBC type: 1111 (0) | 2022.06.28 |
---|---|
[Maven 에러] java.lang.IllegalStateException: Unable to load cache item (0) | 2022.06.24 |
Docker ERROR: the image for the service you’re trying to recreate has been removed (0) | 2022.06.20 |
OAuth2 Redirect 주소 문제 해결 (0) | 2022.06.20 |
The getKey method should only be used when a single key is returned (0) | 2022.06.16 |