--- title: scp — 원격 파일 복사 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: ssh를 이용해 로컬-원격 간 파일을 복사하는 명령어. 소규모 전송에 간편. tags: 프로그램, 원격 서버 접속 관리, scp --- **💬 "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 명령어 실행 결과: 파일 전송과 체크섬](https://games.cursorai.co.kr/assets/scp-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/linux/remote/scp.html