본문 바로가기
Linux/TIP

서버간의 파일복사 프로그램 - scp

by aegypius 2020. 11. 11.
728x90
반응형

  scp (secure copy - remote file copy program)는 서버간의 파일을 복사(전송)하는 프로그램이다. 서버를 통째로 이전한다거나 특정 파일(디렉토리)을 다른 서버로 옮겨야 하는 경우에 유용하다. 로컬서버에서 원격서버로 혹은 원격서버에서 로컬서버로의 전송이 가능하며, 원격서버간의 전송도 가능하다.

  scp는 ssh 기반으로 작동하기 때문에 ssh에 로그인 권한이 없는 계정은 사용할 수 없다. (ssh와 sftp의 포트를 구분한 경우) sftp의 포트가 아닌 ssh포트를 이용해야 한다.

  기본 사용방법은 아래와 같다.


# scp [option] [source] [target]


  source를 target으로 전송(복사)하며, 여러가지 옵션을 설정할 수 있다.
  
 - source : 복사(전송)할 원본 파일(또는 디렉토리)
 
 - target : source가 저장될 경로. 이름을 변경하여 저장할 수 있다.
 

  사용할 수 있는 옵션이 다양하며, 정리하지 않은 옵션은 man page를 참고하자.


* option 


-r : 디렉토리를 복사할 경우 사용. (서브디렉토리까지 복사한다)

-p : (소문자) 복사할 파일(디렉토리)의 속성(날짜, 권한 등)을 그대로 유지하여 전송한다.

-C : 데이터를 압축하여 전송한다.

-P : (대문자) 원격 호스트가 사용하는 ssh의 포트번호를 입력한다. 예) -P12345 또는 -P 12345

-v : 전송과정을 자세히 보여준다.

  sourcetarget로컬 호스트 혹은 원격 호스트 이며, 원격 호스트인 경우에는 원격 호스트의 계정@ip주소:까지 입력한 후에 나머지 경로 혹은 경로와 파일(디렉토리)명을 지정한다.

  예를 들어.. 로컬 호스트의 /home/harepius/web/myhome.kr 디렉토리를 원격 호스트(ip:123.123.123.123) 의 pius 계정에게 전송하며, 저장 위치는 /tmp로 한다면 아래와 같다. 원격 호스트의 ssh 포트가 50505인 경우이다.

# scp -r -p -P50505 /home/harepius/web/myhome.kr pius@123.123.123.123:/tmp

  만약 로컬 호스트의 /home/phreun/saosao.kr 디렉토리를 원격 호스트(ip:1.234.56.78)의 aegypius 계정에게 전송하며, 원격 호스트의 저장 위치는 /home/aegypius/www의 하위에 newsite로 이름을 바꾸고 싶다면 아래와 같이 입력할 수 있다. (원격 호스트의 ssh 포트는 12345라고 가정)

# scp -r -p -P 12345 /home/phreun/saosao.kr aegypius@1.234.56.78:/home/aegypius/www/newsite

----- 실제로 명령을 입력하면 아래와 같이 원격 계정의 ssh 암호를 입력해야 한다.

[root@localhost phreun]# scp -r -p -P 12345 /home/phreun/saosao.kr aegypius@1.234.56.78:/home/aegypius/www/newsite
aegypius@1.234.56.78's password:

----- 입력한 암호가 맞다면 아래와 같이 전송 현황을 볼 수 있다.

icon_img.gif                                                                   100%  145    35.0KB/s   00:00
icon_link.gif                                                                  100%  104     0.5KB/s   00:00
icon_file.gif                                                                  100%  107    25.9KB/s   00:00
btn_close.gif                                                                  100%  211    51.1KB/s   00:00
icon_sound.gif                                                                 100%  113    27.3KB/s   00:00
icon_mobile.gif                                                                100%   62    14.8KB/s   00:00
style.css                                                                      100%   17KB 435.6KB/s   00:00
write.skin.php                                                                 100% 8605    37.2KB/s   00:00
view.answer.skin.php                                                           100% 1301   300.8KB/s   00:00
view.skin.php                                                                  100%   12KB  51.0KB/s   00:00
list.skin.php                                                                  100%   11KB  11.4KB/s   00:01
chk.png                                                                        100% 1070   245.4KB/s   00:00
icon_movie.gif                                                                 100%  110    25.7KB/s   00:00
icon_hot.gif                                                                   100%   97    22.7KB/s   00:00
icon_secret.gif                                                                100%   97    23.0KB/s   00:00
icon_new.gif                                                                   100%   71    16.8KB/s   00:00
icon_img.gif                                                                   100%  145    34.4KB/s   00:00

  파일의 소유권은 전송받는 계정에게 주어지며 -p 옵션의 사용으로 파일의 속성은 그대로 유지할 수 있다.  만약 원격 호스트의 파일(디렉토리)을 로컬 호스트로 전송하려면 source와 target의 위치만 바꾸자.


운영중인 웹사이트의 서버를 변경하기 위해 scp를 사용하는 경우.....
 - [source]와 [target]의 전체경로(full path)가 다르다면, tar 등으로 압축하여 전송하는 것도 좋은 방법이다. 간혹 웹사이트에 포함된 특정 프로그램(결제 모듈이거나, 워드프레스의 특정 플러그인과 같은...)들이 '/' 디렉토리부터 시작하는 절대경로를 기억하는 경우가 있다. 이러한 경우 복사된 사이트의 '절대경로'와 해당 프로그램이 기억하는 절대경로가 서로 상이하기 때문에 오작동을 일으킬 수 있다. 이러한 경우에는 압축하여 전송한 후에 압축을 풀어서 설치하면 해결되는 경우도 종종있다. 물론 프로그램의 소스를 직접 수정하는 방법도 가능할 것이다. 또한 그누보드(GNU board)로 제작한 웹사이트는 웹사이트의 메인디렉토리의 하위에 위치한 data 디렉토리에 주의해야 한다. 이 디렉토리의 하위에 있는 모든 파일과 디렉토리의 소유권은 웹서버에서 있어야 하는데 scp로 전송하게 되면......모든 파일과 디렉토리가 전송받은 계정의 소유가 되므로 전송후에 소유자의 변경작업이 필요하다.

728x90
반응형

댓글