오늘 로컬에서 원격 저장소로 파일을 하나 옮기려고 하는데 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 공개키 등록을 해주셔야 합니다.
'Error' 카테고리의 다른 글
Can not deserialize instance of java.lang.String out of START_OBJECT token 오류 (2) | 2022.07.08 |
---|---|
워드클라우드 오류 cannot open resource (0) | 2022.01.14 |