scp — 원격 파일 복사

Linux / 원격 서버 접속 관리 / scp.html

원격 서버 접속 관리원문등록 2026-10-18

💬 "scp 명령어"

scp는 ssh 위에서 동작하는 파일 복사입니다. 한두 개 파일을 옮길 때 가장 간편합니다.

대량·증분 전송은 rsync가 낫고, scp는 단순 전송에 씁니다.

  • 개념: ssh 인증을 그대로 사용해 파일을 복사합니다.
  • 왼쪽 인자: 원본 경로입니다. 원격이면 user@host:/path입니다.
  • 오른쪽 인자: 대상 경로입니다.
  • 방향: 로컬→원격, 원격→로컬 모두 가능합니다.

자주 쓰는 옵션

옵션설명
-P <포트>ssh 포트를 지정합니다(대문자 P)
-i <키>사용할 키를 지정합니다
-r디렉터리를 재귀 복사합니다
-C전송 중 압축합니다

필수 명령어 조합 3가지

  • scp -i ~/.ssh/deploy app.tgz deploy@10.0.0.9:/tmp/ — 릴리스 파일을 서버로 전송
  • scp -P 22022 deploy@10.0.0.9:/var/log/app/error.log ./ — 서버 로그를 로컬로 가져오기
  • scp -r -i ~/.ssh/deploy ./conf deploy@10.0.0.9:/tmp/conf — 설정 디렉터리 통째 전송

💬 "실제로 자주 하는 실수와 회피법 알려줘"

실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.

1단계 · 전송

파일을 대상 서버로 보냅니다.

scp -i ~/.ssh/deploy app-20261018.tgz deploy@10.0.0.9:/tmp/

2단계 · 검증

크기와 체크섬을 비교합니다.

ssh deploy@10.0.0.9 'md5sum /tmp/app-20261018.tgz' && md5sum app-20261018.tgz

3단계 · 반영

검증 후 배포 절차를 진행합니다.

ssh deploy@10.0.0.9 'tar xzf /tmp/app-20261018.tgz -C /opt/app/releases/20261018'

실무에서는 이렇게 씁니다

1. 릴리스 파일 전송

상황 — 빌드 서버에서 운영 서버로 산출물을 보냅니다.

scp -i ~/.ssh/deploy dist/app.tgz deploy@10.0.0.9:/tmp/

결과 — 파일이 /tmp에 전송되고 진행률이 표시됩니다.

포인트 — 전송 후 체크섬을 비교하면 손상된 전송을 바로 잡습니다.

2. 장애 로그 회수

상황 — 운영 서버 로그를 로컬에서 분석해야 합니다.

scp -i ~/.ssh/deploy deploy@10.0.0.9:/var/log/app/error.log /tmp/srv01-error.log

결과 — 로그가 로컬로 복사되어 편한 도구로 분석할 수 있습니다.

포인트 — 큰 로그는 압축해 받거나 필요한 구간만 grep해 가져옵니다.

주의할 점

  • 포트 옵션은 대문자 -P입니다(ssh는 소문자 -p).
  • scp는 이어받기·증분 전송을 지원하지 않아 대용량에서 비효율적입니다.
  • 기본적으로 권한/소유자를 완전히 보존하지 않습니다.
  • 운영 경로에 바로 덮어쓰지 말고 /tmp에 받아 검증합니다.

실제 실행 화면

릴리스 파일을 전송하고 체크섬을 확인한 결과입니다.

scp 명령어 실행 결과: 파일 전송과 체크섬

실제 운영 중인 서버

이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.