linux 에서 scp 로 원격지에 파일 전송하기

리눅스 서버 커맨드 라인에서 wget 이나 curl 을 사용해서 파일을 다운로드 받을 수 있습니다.

만약 다운받은 파일을 다른 서버로 복사해야 할 경우 scp 를 사용하는 게 가장 간단하고 보안성도 뛰어납니다.

SCP 사용

scp 는 SSH 기반의 Secure Copy Protocol 프로토콜을 사용하는 호스트간 파일 복사 프로그램입니다.

scp는 ssh 를 기반으로 하므로 상대 호스트에 SSH 로 접속이 가능해야 합니다.


local → remote

scp 는 source 위치를 먼저 적어주면 되므로 local 파일을 remote 에 복사할 때는 아래처럼 SOURCE DESTINATION 형식을 사용하면 됩니다.

scp path/to/local_file remote_host:path/to/remote_file


예로 현재 폴더의 text.txt 를 web_server1 의 /var/www/html 에 전송할 경우 다음과 같이 적어주면 됩니다.

scp text.txt web_server1:/var/www/html

web_server1 같은 원격 호스트는 ~/.ssh/config 에 지정하면 사용이 편리합니다.

 Click here to expand...
Host web_server1 
    HostName 10.10.10.100
    User lesstif
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/web_server1/id_rsa


port 지정

보안상의 이유로 SSH 기본 포트는 well known port 인 22 번보다는 다른 포트를 사용하는 것을 권장하고 있습니다.

다음은 SSH 포트로 10022 를 사용하는 web_server1 에 text.txt 파일을 복사하는 예제입니다.

scp -P 10022 text.txt web_server1:/var/www/html

매번 포트를 지정하는 것보다는 ~/.ssh/config 에 Port 정보를 등록해 주는 게 더 편리합니다.

 Click here to expand...
Host web_server1 
    HostName 10.10.10.100
    User lesstif
	Port 10022
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/web_server1/id_rsa



remote → local

원격지 파일을 로컬로 복사할 때는 local → remote 와 순서를 반대로 적어주면 됩니다.

scp remote_host:path/to/remote_file  path/to/local_file 


예로 원격지인 web_server1 의 /var/www/html/test.txt 파일을 로컬의 /tmp/text.txt 에 전송할 경우 다음과 같이 적어주면 됩니다.

scp web_server1:/var/www/html /tmp/text.txt 

하위 폴더 포함

기본적으로 scp 는 파일 단위 복사만 가능하지만 recursive 를 의미하는 -r 옵션을 사용하면 디렉터리 복사도 가능합니다.

다음은 web_server1 의 /var/www/html 을 현재 서버의 /opt/ 에 복사합니다.

scp -r web_server1:/var/www/html /opt

2 곳의 원격지에 복사

scp 를 실행하는 서버를 중계기로 사용해서 원격지1에 있는 파일을 직접 원격지2에 전송할 수 있습니다.

즉 remote1 ➡️ local ➡️ remote2 형식으로 사용이 가능합니다.

이렇게 사용하려면 -3 옵션을 주고 REMOTE1 REMOTE2 형식으로 사용하면 되며 다음은 web_server1 에 있는 test.txt 파일을 local 을 통해서 web_server2 에 바로 복사합니다.

 scp -3  web_server1:/var/www/html/test.txt web_server2:/var/www/html

같이 보기

Ref