SCP는 Secure Copy의 약자로 리눅스 환경에서 remote로 전송할 수 있습니다. 즉, 외부로 복사하거나 외부 파일을 복사하여 가져올 수 있습니다. 일반적인 cp 명령어의 앞에 s를 붙여 scp를 사용합니다. 그럼 아래에서 자세하게 예제와 알아보세요.

# SCP, Secure Copy를 사용하여 외부, remote 저장소에 카피하기

아래는 다양한 scp를 사용하는 예제들입니다. 현재 로컬에서 외부 ip로 파일을 전송하거나 반대로 외부 ip의 자료를 현재 local에 가져올 수도 있습니다. 그럼 아래를 봐주세요.


! scp 명령어시 Permission 에러가 발생하는 경우
scp 사용시 만약 Permissions XXX for keyfile are too open. 이라는 에러가 발생할 수 있습니다. 이는 Private 키의 퍼미션이 제한적이지 않기 모두 공개되어 있기 때문에 발생하는 Permission 문제입니다. 이를 해결하기 위해서 chmod를 사용하여 400 또는 600 으로 제한하여 다시 시도해 보시기 바랍니다.
$ chmod 400 keyfile

만약 동작하지 않으면 root 권한을 가지고 있는지 역시 확인해보시기 바랍니다. root에서 user account로 변경 후 다시 시도해보세요.


! Remote Server에서 Permission denied가 발생하는 경우
이 경우 Permission error(Public)과는 리모트에서 Permission denied 에러가 발생한 경우입니다... 즉 scp를 사용하기 위해서는 보내는 local과 받는 remote server의 permission이 해당 사용자에 대하여 모든 Permission이 문제 제 없어야만 가능합니다.

remote server의 user가 webisfree인 경우라면 복사할 경로(/test/)에 chown을 사용하여 해당 사용자 권한을 아래와 같이 부여합니다.
$ chown webisfree test

이제 다시 시도해 보시기 바랍니다. 



! scp를 사용하여 다른 remote server에 ip로 복사하기
만약 현재 위치에 있는 abc.txt라는 이름의 파일을 특정 remote ip로 복사하는 방법입니다. 아래와 같이 user@ip:/경로/를 사용하여 파일을 전송할 수 있습니다.
$ scp abc.txt ubuntu@123.456.789.012:/test/

위에서는 사용자가 ubuntu, ip가 123.456.789.012인 경우의 예입니다. 실행하면 해당하는 패스워드를 입력하게 됩니다.


! remote의 webisfree.com에 있는 test.txt을 local host의 /home/ubuntu로 복사하기
$ scp ubuntu@webisfree.com:test.txt /home/ubuntu/


! remote의 webisfree.com에 있는 test.txt을 local host의 현재경로에 복사하기
$ scp ubuntu@webisfree.com:test.txt .


! test.txt를 webisfree.com의 8080포트로 remote 복사하기
$ scp -P 8080 test.txt ubuntu@webisfree.com

! Options 설정하기
-v  //  Debug 정보를 함께 출력합니다.
-i  //  인증이 필요한 경우 -> -i filename



# 여러개의 파일 한번에 복사하기

아래는 test1.txt, test2.txt, test3.txt 파일(multi files copy)을 현재 경로에 복사합니다.
$ scp ubuntu@webisfree.com:/home/\{test1.txt, test2.txt, test3.txt\} . 

이처럼 여래개의 파일인 경우 쉽게 멀티복사가 가능하니다. 모습이 객체처럼 데이터를 처리, 복사합니다.



# 인증이 필요한 경우만약 test.pem 파일로 인증이 필요한 경우 -i 옵션을 사용하여 아래처럼 실행합니다.
$ scp -i test.pem test.txt .

이제 인증을 거쳐 scp가 동작합니다.