기술/서버

[리눅스/우분투] ssh 파일 전송, permission denied 해결

하기싫지만어떡해해야지 2024. 7. 31. 14:20

ssh를 통해 접속한 서버로

내 로컬에 있는 파일을 전송해야했다

 

우선 ssh 접속을 통해

파일을 원격으로 전송하는 명령어이다

scp [전송할 파일경로] [사용자명@전송서버ip주소]:[전송서버내 저장경로]

 

만약 따로 설정한 포트 번호가 있다면

scp -p [포트번호] [전송할 파일경로] [사용자명@전송서버ip주소]:[전송서버내 저장경로]

위와 같이 하면 된다

 

 

그런데 명령어를 사용해서

파일을 원격 전송하려 했더니

permission denied 에러가 발생했다

 

따라서 구글링을 해본 결과

3가지 정도의 경우의 수가 있다고 한다

 

1. 읽기 및 쓰기 권한 확인

전송하려는 파일이 있는 폴더에서

ls -al

명령어를 치면 읽기, 쓰기, 실행 권한을 확인할 수 있는데

읽기 및 쓰기 권한이 있는지를 확인해주자

 

 

가장 왼쪽의

-rw-r--r--

이런 식으로 적힌 부분을 확인해주면 된다

-r은 read(읽기)

-w는 write(쓰기)

-x는 excute(실행)

권한을 의미한다

 

-rw-r--r--와 같은 식으로 되어있다면

문제가 없다고 한다

 

2. 경로 및 포트가 맞는지 확인

내가 전송하려고 하는 디렉토리가 존재하는지

아니면 포트 번호를 제대로 적었는지를 확인해주자

 

3. 원격 저장소 디렉토리 권한

나같은 경우는 이게 원인이었다

전송할 원격 저장소의 디렉토리 권한이

root로 되어있는 경우

permission denied 에러가 발생한다

 

전송하려는 원격 저장소 디렉토리에서

ls -al

혹은

ll

명령어를 입력해준다

 

그러면

왼쪽에서 두 번째에 

root 혹은 사용자계정이

적혀있는걸 확인할 수 있는데

 

이때 root로 적혀있으면

해당 디렉토리의 권한이

root라는 소리다

 

이게 root이면

원격 전송에 실패하기 때문에

디렉토리 권한을 변경해주어야 한다

 

sudo chown [권한 줄 사용자 계정] [디렉토리명]

다음과 같이 명령어를 입력한 뒤

다시 한 번

ls -al 혹은 ll 을 해주면

아마 디렉토리 권한이 설정한 사용자로

변경된 것을 확인할 수 있을 것이다

 

 

이렇게 해 준 다음

다시 scp 명령어를 통해

원격으로 전송해주면

 

다음과 같이 전송이 완료된다

 

그다음 원격 저장소에 들어가서

잘 들어갔는지 확인해주면

원하는 디렉토리에 파일이 올바르게

저장된 것을 확인할 수 있다

 

 

참고:

https://chongmin-k.tistory.com/entry/scp-permission-denied-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%B4-%EC%8B%9C%EB%8F%84-%ED%95%B4%EB%B3%BC-%EB%A7%8C%ED%95%9C-%EB%B0%A9%EB%B2%95%EB%93%A4