일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 구글
- error
- logstash
- ChatGPT
- JavaScript
- 엘라스틱서치
- docker
- JS
- Git
- elasticsearch
- Kibana
- 영어
- mariadb
- build
- MySQL
- MSSQL
- nodejs
- API
- Python
- ssh
- Linux
- AWS
- 설정
- Windows
- unity
- Ai
- 유니티
- s3
- sample
- Today
- Total
가끔 보자, 하늘.
scp로 터미널에서 파일 주고 받기 본문
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에 정의된 포트를 읽어서 복사합니다.
이상입니다. 자주 쓰지 않다보니 할 때마다 검색해서 찾는 저 자신을 보고 한번 정리해야겠다라는 생각이 들더군요.
여러분들에게도 도움이 됬으면 합니다. :)
'개발 이야기 > 인프라 구축 및 운영' 카테고리의 다른 글
pm2 모듈을 부트 스크립트에 등록하는 방법 (0) | 2020.08.20 |
---|---|
EC2에서 ElastiCache-Redis에 접속하기 (0) | 2020.08.07 |
서버리스 서비스 예제 - 04 [S3 정적 웹사이트에 https 적용하기] (31) | 2020.05.18 |
악성 데몬 찾고 해결하는 방법 (0) | 2020.05.12 |
서버리스 서비스 예제 - 03 [S3에 도메인 연동하기] (0) | 2020.05.08 |