본문 바로가기
Linux

SSH 파일 업로드 및 다운로드 하는 방법

by Yuchulnote 2023. 10. 19.
728x90

머신러닝/딥러닝을 하시는 분들 중 로컬 환경의 한계를 극복하기 위해 좋은 GPU와 RAM이 탑재된 서버환경을 사용하는 경우가 많다.

이 때, 서버에 파일을 업로드하거나 다운로드하여서 데이터 관리를 해야할 필요성을 느끼게 된다!

Linux 환경의 서버에 ssh로 접속 후 서버와 서버 혹은 로컬과 서버사이에서 파일을 옮기기 위한 명령어는

"scp" 를 사용한다.

 

가벼운 파일이나 디렉토리는 vscode 같은 프로그램에 단순 드래그하여옮기는 것도 가능하지만, 이는 대량의 파일이나 디렉토리를 옮길 때에는 심심찮게 Out Of Memory 에러를 마주하곤 한다.

그래서 scp 명령어 사용법을 알아두시는게 도움이 많이 된다.

이번 글에서 완벽하게 정리해보려 한다.

1. 로컬과 서버간에 파일이나 디렉토리를 옮기는 방법.

2. 서버와 서버간에 파일이나 디렉토리를 옮기는 방법.

 

scp 명령어의 기본 형태는 "scp [보낼파일(디렉토리)] [목표 디렉토리]" 이다.


*참고*

추가로 ssh 접속하고, 접속한 서버의 파일(디렉토리)를 옮기시려할 때 다음과 같은 에러가 발생할 수 있다.

"ssh: Could not resolve hostname c: Temporary failure in name resolution"

이는 권한 문제로 옮길 파일과 목표 디렉토리 모두 권한이 root로 되어있기 때문이고 해결 방안은 다음과 같다.

보내려하는 파일에 "chown user:user [보낼 파일(디렉토리)]" 로 user 권한 부여

받으려는 디렉토리에서 "chown user:user [디렉토리]" + "chmod 775 [디렉토리]"


Local & Server

업로드

로컬에서 서버로 업로드 할 때의 명령어 구조는 다음과 같다!

터미널 창에 "scp 로컬파일경로 사용자@IP주소:서버저장경로"

예시)
참고로 슬래시( / ) 와 백슬래시( \ ) 둘의 구분은 없다. 혼용해서 사용해도 괜찮다.

scp -r C:\Users\yuchul\Desktop\move yuchul@192.123.0.12:/data/target/thisfolder

scp 옆에 -r이 뭔지 다른 옵션은 무엇인지는 아래와 같다. 

  • 아무것도 안쓸 때 : 하나의 파일만을 옮길 경우
  • -r : 폴더와 폴더 내 모든 파일을 옮기는 경우
  • -P(대문자) : 접속 포트를 지정하는 경우

 

다운로드

서버에서 로컬로 다운로드 할 때의 명령어 구조는 다음과 같다!

터미널 창에 "scp 사용자@IP주소:서버파일경로 로컬저장경로"

예시)

scp -r yuchul@192.123.0.12:/data/source/thisfolder C:\Users\yuchul\Desktop\target
  • 옵션을 입력하지 않았을 때 : 하나의 파일만을 옮길 때
  • -P : 위 설명과 동일
  • -r : 위 설명과 동일
  • -i : 키를 이용해서 접속하는 경우, 키 파일을 입력

Server & Server

서버에서 다른 서버로 파일을 다이렉트로 옮기고 싶은 경우에는 옮길 파일이 있는 서버로 먼저 접속한다.

-r, -P 등의 옵션은 원하는 작업에 맞춰 설정하고 명령어는 다음과 같다

scp [옵션] [옮길 파일(디렉토리)] [타겟서버_계정명]@[타겟서버_IP주소]:[타겟서버경로]

추가로, 이 작업을 하기 전에 클라이언트와 서버 컴퓨터 모두 ssh가 설치 되어 있어야하고
클라이언트와 서버 컴퓨터 모두 root 권한 접근이 가능해야 한다.

만일 root 권한이 없다면 번거롭겠지만, 로컬로 모두 다운로드하고 다시 업로드하는 방식을 취해야한다.

728x90
반응형