SCP 완벽 가이드 (Kubernetes & Linux 실무용)
1) 기본 개념
scp
= SSH 위에서 파일/디렉터리를 복사하는 명령.- 형식:
scp [옵션] <src> <dst>
- 방향: 로컬→리모트, 리모트→로컬, 리모트↔리모트 모두 가능.
- 현대 OpenSSH는 기본적으로 SFTP 모드 사용 (
-O
로 레거시 scp 프로토콜 강제 가능).
2) 필수 옵션 & 패턴
자주 쓰는 옵션
옵션 | 설명 |
---|
-r | 디렉터리 재귀 복사 |
-p | 원본의 시간/권한 보존 |
-C | 압축 |
-l <kbps> | 대역폭 제한 |
-i <key> | 특정 프라이빗 키 사용 |
-P <port> | SSH 포트 지정 |
-o <SSH옵션> | 임시 SSH 옵션 지정 |
-J <jump> | 점프호스트 경유 |
로컬 → 리모트
scp -P 2222 ./app.jar ubuntu@worker-1:/opt/apps/
scp -rpC ./config ubuntu@worker-2:/etc/myservice/
리모트 → 로컬
scp ubuntu@master-1:/var/log/k8s/api-server.log ./logs/
리모트 ↔ 리모트
scp ubuntu@worker-1:/opt/data/dump.tar ubuntu@worker-2:/opt/backup/
scp -3 ubuntu@worker-1:/opt/data/dump.tar ubuntu@worker-2:/opt/backup/
점프호스트 경유
scp -J ubuntu@bastion:22 ./site.tgz ubuntu@worker-3:/srv/
3) 실무 레시피
특정 파일만
scp ./*.yaml ubuntu@master-1:~/manifests/
scp ubuntu@master-1:'/var/log/*.log' ./logs/
숨김파일 포함
scp -rpC ~/.bash* ~/.zshrc ubuntu@worker-1:~/
권한 문제 해결
scp ./nginx.conf ubuntu@worker-1:/tmp/
ssh ubuntu@worker-1 'sudo mv /tmp/nginx.conf /etc/nginx/nginx.conf && sudo systemctl reload nginx'
대용량 성능 최적화
tar czf - ./dataset | ssh ubuntu@worker-2 'tar xzf - -C /data/'
중단 후 재개
sftp ubuntu@worker-1
sftp> reget bigfile.img
sftp> reput bigfile.img
kubectl과 함께
kubectl cp ./config.yaml default/my-pod:/app/config.yaml
4) 보안 베스트 프랙티스
# 서버 측 설정
PasswordAuthentication no
PubkeyAuthentication yes
# 권한 설정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
- 호스트키 검증:
-o StrictHostKeyChecking=yes
- 점프호스트 사용
- 방화벽(UFW)로 SSH 포트 제한
- Fail2ban / Cloudflare Tunnel 고려
5) 성능/안정화 팁
scp -o Ciphers=aes128-gcm@openssh.com -C big.csv ubuntu@host:/data/
scp -l 40000 big.img ubuntu@host:/backup/
scp -o ConnectTimeout=5 -o ServerAliveInterval=10 -o ServerAliveCountMax=6 ...
6) 문제 해결 체크리스트
- Permission denied → 키/권한 확인
- Connection timed out → 방화벽/포트포워딩 확인
- 파일명 특수문자 → 따옴표 감싸기
- 원격 글로빙 문제 → 따옴표로 원격에서 해석
7) rsync와 비교
- scp: 간단, 빠른 일회성 복사
- rsync: 동기화, 재개, 검증 등 강력
8) 즐겨 쓰는 스니펫
scp -pqC ./k8s/*.yaml ubuntu@master-1:~/manifests/
scp ubuntu@worker-2:'/var/log/syslog*' ./logs/worker-2/
scp -3 ubuntu@worker-1:/opt/dump.tgz ubuntu@worker-3:/opt/backup/
tar czf - ./dataset | ssh ubuntu@worker-2 'tar xzf - -C /data/'
scp ./nginx.conf ubuntu@worker-1:/tmp/ && ssh ubuntu@worker-1 'sudo install -m 644 /tmp/nginx.conf /etc/nginx/nginx.conf && sudo systemctl reload nginx'
scp -J ubuntu@bastion ./bundle.tgz ubuntu@worker-3:/srv/
scp -l 30000 -C ./logs.tar.gz ubuntu@backup:/backup/
9) 생산성 팁
~/.ssh/config
적극 활용- 스크립트화
- 전송 후
sha256sum
비교