관리 메뉴

가끔 보자, 하늘.

scp로 터미널에서 파일 주고 받기 본문

개발 이야기/인프라 구축 및 운영

scp로 터미널에서 파일 주고 받기

가온아 2020. 6. 9. 12:13

scp(secure copy) 사용법을 정리해 보겠습니다.

 

원격지의 서버들은 모두 공인 IP를 가지지 않는 경우가 많고, 보안 문제로 접속하는 터미널 외에는 직접 연결이 안되는 경우가 대부분입니다. 

 

원격지에 172.31.5.31 ~ 172.31.5.39 까지의 서버들이 있으며, 하나의 공인 IP를 통해 172.31.5.31로 접속할 수 있고, 31번으로 전송한 파일들을 32 ~ 39번 서버들로 복사해야 하는 상황을 가정해 보겠습니다.

 

scp의 기본 사용법은 아래와 같습니다. 

scp [옵션] [[user@]host1:]file1 ... [[user@]host2:]file2

1:1 전송뿐만 아니라 n:n 전송도 지원됩니다. 또한 로컬 파일을 원격지로 보내거나 원격지의 파일을 로컬에 복사할 수 있으며, 원격지의 파일을 다른 원격지로 보낼 수 있습니다. 

 

지정할 수 있는 옵션은 아래와 같습니다.

-P  -P 3010 처럼 원격지의 ssh 포트 번호를 지정할 수 있습니다. 기본값은 22 입니다. 대문자임을 주의하세요.
-r 디렉토리의 하위 폴더, 파일을 모두 복사합니다.
-p 복사할 때 원본 파일의 수정/사용 시간, 권한 등이 모두 유지됩니다.
-c 압축 후 복사합니다. 용량이 클 때 사용하세요.
-v 복사되는 과정을 볼 수 있게 정보를 출력합니다.

 

아래 몇 가지 샘플을 통해 살펴보고 마무리 하겠습니다. 원격 포트는 모두 3010이라고 가정하겠습니다.

 

로컬파일을 원격지로 복사

 

로컬에 /tmp/test.tar 이라는 파일을 172.31.5.32 서버(port number 3010)의 /tmp 폴더에 복사합니다.

scp -P 3010 /tmp/test.tar abc@172.31.5.32:/tmp

 

로컬파일들을 원격지로 복사

 

복사할 파일 리스트를 필요한 만큰 나열하면 됩니다.

scp -P 3010 /tmp/test.tar /tmp/test2.tar abc@172.31.5.32:/tmp

 

원격지 파일을 로컬에 복사

 

172.31.5.32 서버(port number 3010)의 /tmp/test.tar 파일을 로컬의 /tmp 라는 폴더에 복사합니다.

scp -P 3010 abc@172.31.5.32:/tmp/test.tar /tmp

 

원격지 파일들을 로컬에 복사

 

원격지의 파일들은 ""로 감싸서 나열하면 됩니다.

 

scp -P 3010 abc@172.31.5.33:"/tmp/test.tar /tmp/test2.tar" /tmp

 

위의 두 예제처럼 -P 옵션은 둘 중 앞에 선언된 원격지의 port로 사용됩니다. 

 

복사할 파일의 원본 위치와 복사될 위치 모두 원격지일 경우 앞에 선언된 원격지의 포트로 인식합니다. 

 

만약 사용되는 포트가 22번이라면 상관없지만 두 원격지 모두 사용하는 포트가 22번이 아닐 때는 앞에 있는 원격지는 -P옵션으로 포트를 지정할 수 있지만 그 다음 원격지부터는 모두 22번으로 인식합니다. 

 

이런 경우에는 ssh_config를 설정하여 해결할 수 있습니다. 상세 내용은 man ssh_config를 통해 확인할 수 있습니다. 

 

아래 예제는 172.31.5.33, 172.31.5.34 서버의 ssh 포트를 3010으로 지정한다고 가정하겠습니다. 

vi ~/.ssh/config  // 기존에 지정한 내용이 없다면 신규 파일을 생성하게 됩니다.

// 파일 내용은 아래와 같이 지정할 수 있습니다.
Host 172.31.5.33
Port 3010

Host 172.31.5.34
Port 3010

 

원격지 파일을 다른 원격지에 복사

 

172.31.5.35 서버(port number 3020)의 /tmp/test.tar 파일을 172.31.5.33 서버의 /tmp 라는 폴더에 복사합니다. 33번의 ssh port는 위와 같이 ssh_config에 지정했다고 가정하겠습니다.

 

scp -P 3020 abc@172.31.5.35:/tmp/test.tar abc@172.31.5.32:/tmp

35번 서버의 포트인 3020을 옵션 P로 지정했으며 32번의 포트는 ssh_config에 정의된 포트를 읽어서 복사합니다. 

 

 

이상입니다. 자주 쓰지 않다보니 할 때마다 검색해서 찾는 저 자신을 보고 한번 정리해야겠다라는 생각이 들더군요. 

 

여러분들에게도 도움이 됬으면 합니다. :)

 

 

반응형