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 : 전송과정을 자세히 보여준다.
source와 target은 로컬 호스트 혹은 원격 호스트 이며, 원격 호스트인 경우에는 원격 호스트의 계정@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로 전송하게 되면......모든 파일과 디렉토리가 전송받은 계정의 소유가 되므로 전송후에 소유자의 변경작업이 필요하다.
'Linux > TIP' 카테고리의 다른 글
[CentOS] LINUX swap file 생성으로 메모리 부족을 해결... (0) | 2020.11.23 |
---|---|
vsftpd.conf (0) | 2020.11.17 |
[Linux] firewall-cmd : 특정 IP주소의 접속 차단 (0) | 2020.08.27 |
[Adminer] vs phpMyAdmin (0) | 2020.07.26 |
SSL3_GET_RECORD:wrong version number, errno 0 (0) | 2020.07.20 |
댓글