728x90

오늘 로컬에서 원격 저장소로 파일을 하나 옮기려고 하는데 scp permission denied오류 때문에

리눅스 쉘에 명령어를 바꿔가며 수십 번 처보고, 구글에 검색도 해보고 얻은 결과입니다.

 

문제가 저와 다를 수 있지만 대부분 비슷한 답을 주니 먼저 시도해보고 다른 방법을 찾는 것도 좋으실 듯합니다.

 

일단 제 코드는 아래와 비슷합니다.

$ scp -P 9900 README.md user@192.168.xxx.xxx:/home/user/repo

해당하는 주소 home/user/repo에 9900번 포트를 이용해 README.md 파일을 옮기고 싶었으나

scp permission denied 오류가 발생했습니다.

 

해당 오류를 검색해보시면 크게 세 가지 방법을 찾으실 수 있는데요.

1. 옮기려는 파일의 권한이 잘 주어졌는지 확인해보세요. 

2. 원격 저장소의 포트 번호나 경로가 맞는지 확인해보세요.

3. 원격 저장소의 폴더 권한을 확인해보세요.

 

먼저 첫 번째 문제는 하위 디렉토리로 이동해서 ls -al 명령어를 치면 아래와 같은 결과를 얻을 수 있습니다.

그걸 보고 읽기, 쓰기 권한이 있는지 확인해보세요.

빨간색 부분이 권한이 있는지 없는지 나와있는 부분입니다. r은 읽기 w는 쓰기 x는 실행

저처럼 되어 있다면 문제없습니다.

 

두 번째의 포트번호는 원격 저장소에 설정하신 설정을 찾으셔야 하니 패스하고

경로 같은 경우는 상대 경로로 작성하면 된다는 이야기를 여러 스택오버플로우 페이지에서 볼 수 있었습니다.

$ scp -P 9900 README.md user@192.168.xxx.xxx:/home/user/repo

예를 들어 위와 같은 주소가 원격 저장소의 주소이고, /home/user가 홈 디렉토리인 경우에는 아래처럼 작성할 수 있습니다.

$ scp -P 9900 README.md user@192.168.xxx.xxx:~/repo

 

세 번째 문제는 로컬에서 원격 저장소에 파일을 보낼 때 원격 저장소의 디렉토리가 root 권한으로 설정되어있을 경우

해당 오류가 발생할 수 있습니다.

ls -al 명령어를 쳤을 때 파일을 받아오려는 원격 저장소의 디렉토리의 권한이 위와 같이 root로 되어있다면

권한을 변경하고 다시 시도해보세요.

$ sudo chown <사용자 계정> <디렉토리명>
$ sudo chown ymkim repo.git

위의 명령어로 사용자 계정으로 권한을 바꿀 수 있습니다.

예를 들어 두 번째 명령어는 repo.git 폴더를 ymkim계정 권한으로 바꾸는 것입니다.

 

여담으로 위의 방법들이 안되시면 ssh 서비스가 켜져 있는지 확인해보세요.

$ service ssh status

혹은 Scp permission denied (publickey)의 문제이면 원격 저장소에 ssh 공개키 등록을 해주셔야 합니다.

728x90

+ Recent posts