scp 개념정리

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 비교