LabHub
学习 学习路径 课程

SSH 与文件传输

用 scp 与 sftp 传文件

在 LabHub 中继续学习

한국어 원문으로 표시합니다.

목표

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

참고

전송할 파일 준비

/root/xfer/src 디렉터리를 만들고 그 안에 a.txt(1KB 이상), b.txt(1KB 이상), c.bin(10KB 이상) 세 파일을 만드세요.

크기가 다른 파일 세 개면 충분합니다. head 나 dd 로 만들어도 되고 base64 로 채워도 됩니다.

파일 올리기

원격의 /root/xfer/dst/ 디렉터리를 만들고 a.txt 를 그리로 올리세요.

포트 지정은 대문자 옵션입니다. 소문자는 뜻이 완전히 다르니 주의하세요.

디렉터리 통째로 올리기

/root/xfer/src 디렉터리 전체를 원격의 /root/xfer/tree/ 아래로 재귀 복사하세요. 결과적으로 /root/xfer/tree/src/b.txt 가 존재해야 합니다.

디렉터리를 보내려면 재귀 옵션이 필요합니다. 대상 경로가 없으면 미리 만들어 두세요.

내려받기

원격의 /root/xfer/dst/a.txt 를 로컬 /root/xfer/back/ 으로 내려받으세요.

원격 경로를 앞에, 로컬 경로를 뒤에 씁니다. 원격 표기는 사용자@호스트:경로 형식입니다.

sftp 배치 실행

/root/xfer/batch.txt 에 sftp 배치 명령을 적고 실행하세요. 배치는 /root/xfer/src/c.bin 을 원격 /root/xfer/dst/ 로 올려야 합니다. 실행 로그를 /root/xfer/sftp.log 로 저장하세요.

sftp 에는 명령 목록을 파일에서 읽는 옵션이 있습니다. 배치 파일에는 한 줄에 명령 하나씩 씁니다.

타임스탬프 보존

b.txt타임스탬프를 보존한 채 원격 /root/xfer/dst/ 로 복사하고, 원본과 사본의 mtime(초 단위)을 각각 한 줄씩 /root/xfer/mtime.txt 에 적으세요. 두 값이 같아야 합니다.

보존 옵션은 소문자입니다. stat 으로 mtime 을 비교해 확인하세요.

무결성 검증

/root/xfer/src 의 세 파일에 대한 sha256 매니페스트를 만들고, /root/xfer/dst/root/xfer/tree/src 에 도착한 파일들의 해시가 일치하는지 검증해 결과를 /root/xfer/verify.txt 로 저장하세요.

sha256sum 으로 매니페스트를 만들고 -c 로 검사합니다. 원본과 사본이 같은 이름을 가지도록 경로를 맞추면 편합니다.

옵션 정리 노트

/root/xfer/notes.txt 를 다음 3줄로 만드세요. SCP_PORT_FLAG=-P / SSH_PORT_FLAG=-p / SCP_PRESERVE_FLAG=-p

scp 와 ssh 에서 포트 옵션의 대소문자가 다르다는 점이 핵심입니다. 값은 정확한 문자로 적으세요.