우분투 실전 명령어 | scp/sftp 파일 전송 실전

언제 쓰는가

운영 중인 서버에서 설정 파일이나 로그를 다른 서버/로컬로 옮겨야 할 때 scpsftp를 가장 자주 씁니다. 별도 에이전트 설치 없이 SSH만 열려 있으면 바로 사용할 수 있어서, 긴급 대응 상황에서도 빠르게 처리할 수 있습니다. 특히 배포 전 설정 백업, 장애 로그 수집, 점프 서버 경유 전송에서 유용합니다.

바로 쓰는 명령어

# 로컬 -> 원격 서버로 파일 1개 전송
scp ./nginx.conf [email protected]:/etc/nginx/nginx.conf

# 원격 -> 로컬로 로그 파일 가져오기
scp [email protected]:/var/log/nginx/error.log ./error.log

# 디렉터리 통째로 전송
scp -r ./deploy [email protected]:/opt/app/
# 포트가 2222인 서버로 전송
scp -P 2222 ./app.env [email protected]:/opt/app/.env

# 개인키 지정
scp -i ~/.ssh/prod_ed25519 ./backup.sql [email protected]:/data/backup/

# 대역폭 제한(예: 4MB/s 근처)으로 네트워크 영향 줄이기
scp -l 32768 ./big.tar [email protected]:/data/

핵심 옵션/패턴

  • -r: 디렉터리 재귀 전송. 디렉터리 보낼 때 빠뜨리면 실패합니다.
  • -P <port>: SSH 포트 지정. 소문자 -p가 아니라 대문자 -P입니다.
  • -i <key>: 특정 SSH 키 사용.
  • -C: 압축 전송. 텍스트 로그처럼 압축률 높은 파일에서 체감이 큽니다.
  • -l <Kbit/s>: 대역폭 제한. 업무 시간대 네트워크 혼잡을 줄일 때 유용합니다.

sftp는 여러 파일을 대화형으로 옮길 때 편합니다.

# 접속
sftp -i ~/.ssh/prod_ed25519 [email protected]

# sftp 내부 명령
pwd
lpwd
cd /var/log/nginx
lcd ./logs
mget *.log
put ./nginx.conf
bye

명령 출력 예시

$ scp ./nginx.conf [email protected]:/etc/nginx/nginx.conf
nginx.conf                                  100%  2.1KB  88.4KB/s   00:00

$ scp [email protected]:/var/log/nginx/error.log ./error.log
error.log                                   100%  184KB   1.3MB/s   00:00
sftp> mget *.log
Fetching /var/log/nginx/access.log to access.log
/var/log/nginx/access.log                   100%  12MB   3.1MB/s   00:03
Fetching /var/log/nginx/error.log to error.log
/var/log/nginx/error.log                    100%  184KB  532KB/s   00:00

자주 하는 실수

  • scp -p 2222처럼 소문자 -p를 써서 포트 지정이 안 되는 경우
  • 목적지 경로 마지막 / 유무를 헷갈려 원치 않는 경로에 파일이 들어가는 경우
  • 원격 파일 덮어쓰기 전 백업 없이 바로 전송하는 경우
  • 권한이 필요한 경로(/etc, /root)에 일반 계정으로 직접 복사하려다 실패하는 경우

검증 방법

# 원격 서버에서 파일 존재/권한/수정시간 확인
ssh [email protected] "ls -lh /etc/nginx/nginx.conf && stat /etc/nginx/nginx.conf"

# 전송 전후 해시 비교
sha256sum ./nginx.conf
ssh [email protected] "sha256sum /etc/nginx/nginx.conf"

운영 팁

  • 운영 파일을 덮어쓰기 전에 원격에서 먼저 백업하세요.
ssh [email protected] "cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.$(date +%F-%H%M%S).bak"
  • 다수 서버 반복 작업이면 rsync(재전송 최적화)나 배포 도구(Ansible)로 전환하는 게 안정적입니다.

출처

  • OpenSSH Manual
  • Ubuntu Server Guide
  • Red Hat Documentation