SSH 와 파일 전송 · scp, rsync, sftp 로 파일 옮기기 · 실습
scp 와 sftp 로 파일 옮기기
목표
scp 와 sftp 로 파일을 올리고 내리고, 타임스탬프를 보존하고, 체크섬으로 무결성을 확인합니다.
왜 중요한가
전송이 "끝났다" 는 것과 "제대로 갔다" 는 것은 다른 말입니다. 실무에서는 항상 체크섬으로 확인합니다. 그리고 scp 의 포트 옵션이 대문자 -P 라는 사실은 사소해 보이지만, ssh 는 소문자가 포트라서 실제로 자주 틀립니다. 소문자 -p 는 타임스탬프 보존이라 조용히 다른 일을 하고 넘어갑니다. sftp 배치 모드는 파트너사와의 파일 교환 자동화에서 여전히 표준적으로 쓰입니다.
이 실습에서 127.0.0.1:2222 는 다른 서버라고 생각하세요. 앞 실습에서 만든 /root/.ssh/id_labhub 키를 그대로 씁니다.
단계
1. /root/xfer/src 디렉터리를 만들고 그 안에 a.txt(1KB 이상), b.txt(1KB 이상), c.bin(10KB 이상) 세 파일을 만드세요.
2. 원격의 /root/xfer/dst/ 디렉터리를 만들고 a.txt 를 그리로 올리세요.
3. /root/xfer/src 디렉터리 전체를 원격의 /root/xfer/tree/ 아래로 재귀 복사하세요. 결과적으로 /root/xfer/tree/src/b.txt 가 존재해야 합니다.
4. 원격의 /root/xfer/dst/a.txt 를 로컬 /root/xfer/back/ 으로 내려받으세요.
5. /root/xfer/batch.txt 에 sftp 배치 명령을 적고 실행하세요. 배치는 /root/xfer/src/c.bin 을 원격 /root/xfer/dst/ 로 올려야 합니다. 실행 로그를 /root/xfer/sftp.log 로 저장하세요.
6. b.txt 를 타임스탬프를 보존한 채 원격 /root/xfer/dst/ 로 복사하고, 원본과 사본의 mtime(초 단위)을 각각 한 줄씩 /root/xfer/mtime.txt 에 적으세요. 두 값이 같아야 합니다.
7. /root/xfer/src 의 세 파일에 대한 sha256 매니페스트를 만들고, /root/xfer/dst 와 /root/xfer/tree/src 에 도착한 파일들의 해시가 일치하는지 검증해 결과를 /root/xfer/verify.txt 로 저장하세요.
8. /root/xfer/notes.txt 를 다음 3줄로 만드세요.SCP_PORT_FLAG=-P / SSH_PORT_FLAG=-p / SCP_PRESERVE_FLAG=-p
참고
scp -P 2222 -i /root/.ssh/id_labhub <원본> root@127.0.0.1:<대상>형태입니다.- 원격에서 디렉터리를 만들려면
ssh lab2 mkdir -p /root/xfer/dst처럼 명령을 원격 실행하면 됩니다. - sftp 배치 파일 예시는
cd /root/xfer/dst다음 줄에put /root/xfer/src/c.bin입니다. - 흔한 실수 1: 2번에서 소문자
-p를 써서 포트가 22 로 가는 경우. 접속 자체가 실패합니다. - 흔한 실수 2: 3번에서 대상 경로 끝의 슬래시 유무에 따라 디렉터리 깊이가 달라집니다. 요구된 최종 경로를 확인하세요.
단계 8개
- 전송할 파일 준비
- 파일 올리기
- 디렉터리 통째로 올리기
- 내려받기
- sftp 배치 실행
- 타임스탬프 보존
- 무결성 검증
- 옵션 정리 노트