오늘은 로컬 환경에서 원격 서버로 파일을 보낼 때 발생한 문제를 해결한 것을 포스팅해보겠습니다.
이 문제는 Google Cloud Platform(GCP)을 사용하여 가상 머신을 생성하고,
SSH 서버 상에 접속한 후 로컬에서 SSH서버로 이미지를 보내고자 하는 상황에서 발생하였습니다.
✔️scp 명령어 왜 쓰지?
우선 scp명령어를 어떠한 상황에서 쓰이는지부터 설명하겠습니다.
1. 로컬 파일을 원격 서버로 복사: 로컬 시스템에 있는 파일을 원격 서버로 전송해야 할 때 사용됩니다. 예를 들어, 로컬 시스템에서 작업한 코드나 문서를 원격 서버로 업로드할 때 SCP를 가능. => 저는 이 경우에 해당
명령어 : scp /로컬파일경로/파일명 사용자명@원격서버주소:/원격/디렉토리/경로
2. 원격 서버에서 로컬로 파일 복사: 원격 서버에 있는 파일을 로컬 시스템으로 가져와야 할 때 사용됩니다. 이는 로컬 시스템에서 작업한 결과물을 가져오는 경우에 유용함.
명령어 : scp 사용자명@원격서버주소:/원격파일경로/파일명 /로컬디렉토리경로
3. 디렉토리 전체 복사: -r 옵션을 사용하여 디렉토리를 재귀적으로 복사합니다.
✔️문제 1 : Permission denied (publickey)
ssh(Secure Shell) 터미널에서 i 옵션 없이 scp를 사용할 때,
위와 같이 ssh 키와 관련된 권한이 거절된다는 오류가 발생하였습니다. 이런 경우 scp -i 옵션을 써서 해결합니다.
➜ 문제 1 해결 : scp -i 옵션 사용
//명령어
scp -i [private key 파일 경로 및 이름] [로컬 파일 경로 및 이름] [사용자명@원격서버주소:/저장하고자하는 원격경로]
//예시
scp -i /Users/gyuri/.ssh/newwebproject
/Users/gyuri/Desktop/webprogramming/assignment_week1/gyuri.jpg
cofla30105@34.64.241.187:/var/www
scp 명령어에서 -i 옵션은 사용자가 지정한 특정한 ssh 개인 키 파일을 사용하여 접근 가능한 사용자 인지를 인증하는 데 사용됩니다.
기본적으로 scp는 ssh를 사용하여 원격 서버에 연결하고 파일을 전송하는데, 이때 ssh는 사용자의 로컬 시스템에 있는 ssh 개인 키를 사용하여 원격 서버에 인증합니다.
(ssh: 원격 서버에 안전하게 접속하고 명령을 실행하는 데 사용되는 프로토콜)
✔️문제 2 : Permission denied
//(실패)
gyuri@baggyuliui-MacBookPro .ssh % scp -i /Users/gyuri/.ssh/newwebproject
/Users/gyuri/Desktop/webprogramming/assignment_week1/gyuri.jpg
cofla30105@34.64.241.187:/var/www
Enter passphrase for key '/Users/gyuri/.ssh/newwebproject':
scp: dest open "/var/www/gyuri.jpg": Permission denied
scp: failed to upload file /Users/gyuri/Desktop/webprogramming/assignment_week1/gyuri.jpg to /var/www
서버의 /var/www 경로에 로컬 이미지 gyuri.jpg 를 올리려고 하였으나 이번에도 Permission denied가 난 경우입니다.
(Publickey) 오류가 사라졌고, 이번엔 key에 대한 passphrase까지 입력하였습니다.
➜ 문제 2 해결 : 원격 저장 경로 권한 변경
서버에서 vi를 통해 파일을 쓰고 지울 때 계속 접근 권한 제한이 되었던 사실을 인지하였고,
/var/www 경로에 대한접근 권한 확인을 위하여 명령어 ls -l 을 사용하여 권한 확인을 진행하였습니다.
명령어 ls -l의 결과는 파일 혹은 폴더의 종류와 권한을 나타냅니다.
여기서는 d로 시작하여 폴더임을 나타내고, 이어지는 rwxr-xr-x는 해당 폴더의 권한을 나타냅니다.
첫 번째 3개는 소유자의 권한을, 그 다음 3개는 그룹의 권한을, 마지막 3개는 다른 사용자들의 권한을 나타냅니다.
정리하자면,
- 소유자(root): 읽기, 쓰기, 실행 권한(rwx)
- 그룹(root): 읽기, 실행 권한(rx)
- 다른 사용자들: 읽기, 실행 권한(rx)
이기 때문에 이미지를 받아오고 write 하는 권한이 없는 것을 확인하였습니다.
따라서, chmod 명령어를 사용하여 경로 /var/www에 대한 권한을 변경하여줍니다.
sudo chmod o+w /var/www 명령은 /var/www 폴더에 대해 다음과 같은 권한을 부여합니다:
- o: 다른 사용자들에 대한 권한을 지정합니다. 여기서는 모든 다른 사용자를 나타냅니다.
- +w: 쓰기 권한을 추가합니다.
아까와 같은 scp -i 명령어를 실행해주면 로컬이미지를 원격 서버로 성공적으로 전달하는 것을 확인 할 수 있습니다.
//ssh 서버에서 진행
sudo chmod o+w [원격 경로]
✔️ 실행 결과 예시
//접근 권한 변경 후 서버에 저장할 경로 주지 않는 경우(성공)
gyuri@baggyuliui-MacBookPro .ssh % scp -i /Users/gyuri/.ssh/newwebproject
/Users/gyuri/Desktop/webprogramming/assignment_week1/gyuri.jpg
cofla30105@34.64.241.187:
Enter passphrase for key '/Users/gyuri/.ssh/newwebproject':
gyuri.jpg 100% 174KB 105.8KB/s 00:01
//접근 권한 변경 후 /var/www에 이미지 전송(성공)
gyuri@baggyuliui-MacBookPro .ssh % scp -i /Users/gyuri/.ssh/newwebproject
/Users/gyuri/Desktop/webprogramming/assignment_week1/gyuri.jpg
cofla30105@34.64.241.187:/var/www
Enter passphrase for key '/Users/gyuri/.ssh/newwebproject':
gyuri.jpg 100% 174KB 3.1KB/s 00:56
'웹 프로그래밍' 카테고리의 다른 글
[GCP] GCS(Google Cloud Storage) Bucket 버킷 사용하기 + spring boot 에서 사용하기 (0) | 2024.06.29 |
---|---|
[GCP] GCP VM에 Docker 이용해서 Spring Boot와 React 배포하기 (1) | 2024.06.02 |
[프론트] 리액트로 게시판 만들기 (0) | 2024.03.28 |
GCP 가상 머신 생성 및 APACHE 서버 배포(feat.vscode로 ssh) (0) | 2024.03.12 |