본문 바로가기

2023년 이전/리눅스

SCP를 이용하여 로컬과 원격 서버(UTM, AWS, 네이버 클라우드 등) 사이 파일 전송하기

 

먼저 제 로컬에서 UTM Ubuntu Linux 서버로 파일을 전송하는 법을 알아보겠습니다. 

1. UTM 가상머신을 실행하여 로그인 후 현재 Linux 서버의 IP 주소 알아내기

[현재 입력하고 있는 터미널은 Linux 가상머신의 터미널]

hostname -I 명령어를 입력합니다.

 

 

현재 리눅스 서버의 IP 주소는 192.168.64.2 이라고 바로 알려줍니다.

 

 

2. SSH가 제공하는 scp(secure copy) 명령어를 이용하여  파일 전송하기

로컬의 터미널에서 다음과 같이 명령어를 입력합니다.

 

scp [file path to transfer] [username]@[IP address]:[file path to download]

 

참고로 대괄호 [](brackets)는 필수로 입력해야 하는 명령어를 의미하고 <>(angle brackets)는 선택 옵션, 즉 입력하지 않아도 정상적으로 명령어를 수행하는 경우를 의미합니다.

 

 

예시로 들면 명령어에 입력해야 하는 각 항목은 아래와 같습니다.

 

[file to transfer] (로컬 서버의 전송하고자 하는 파일, 절대 경로를 제시) : /Users/sehyunkim/documents/assignment1/test.py

 

[username] (원격 서버의 유저 이름) : sehyun

 

[IP address] (원격 서버의 public IP address) : 192.168.64.2

 

[file path to download] (원격 서버의 파일 저장 위치) : ~/project1/

 

 

위 명령어를 실행하면 아래와 같이 원격 서버 유저(제 경우 sehyun)의 계정 비밀번호를 입력하라는 명령어가 뜹니다.

 

 

제대로 명령어를 입력했다면 리눅스 서버 유저의 비밀번호를 입력하란느 창이 뜨고, 비밀번호를 맞게 입력하면 원하는 파일을 리눅스 서버로 전송할 수 있습니다.

 

 

3. 파일명, 또는 디렉토리에 공백(띄어쓰기)이 있을 경우:

 

 

다음과 같이 인식을 못하는 경우 발생합니다. 위에선 폴더명을 가렸지만, 예를 들어 디렉토리 이름이

 

'/Users/sehyun/Documents/linux programming/hw1'

 

 

 

이면 실제 디렉토리를 '/Users/sehyun/Documents/linux'로밖에 인식을 못하는 문제가 발생합니다.

 

그럴 땐 공백이 그 폴더명 안에 포함된다는 사실을 컴퓨터에게 알려주기 위해 공백 앞에 '\'를 붙여주면 됩니다.

 

고친 결과:

 

'/Users/sehyun/Documents/linux\ programming/hw1'

 

 

 

4. 단일 파일이 아니라 디렉토리(+ 하위 파일)를 통째로 전송하고 싶다면

보내고자 하는 파일 경로, 또는 파일 디렉토리(절대경로!) 앞에 -r 이라는 옵션만 붙여주면 됩니다.

 

아래처럼 전체 경로를 아무 옵션 없이 scp 명령어로 보내려고 하면, 

'not a regular file'이라는 출력문이 뜨면서 전송을 할 수 없습니다.

 

 

이번에는 옵션을 붙여서 보내면 

 

 

한 폴더 안에 있던 잡다한 파일(소스코드 + 실행파일)을 모두 보여주면서 잘 전송한 걸 확인할 수 있습니다.

 

 

 

5. 원격 서버의 접속에 오류가 발생하는 경우

아래와 같은 창이 뜰 수 있습니다.