중간 저장 영역을 사용하여 호스트 간 파일 이동

중간 저장 영역을 사용하여 호스트 간 파일 이동

호스트 B를 수동 중간 저장 영역으로 사용하여 호스트 A에서 호스트 C로 파일을 이동하기 위한 기존의 좋은 솔루션이 있습니까?

A -> B -> C

제한 사항

  • 호스트 A와 호스트 C는 별도의 네트워크에 있으므로 서로 액세스할 수 없습니다. A와 C 사이에는 터널을 열 수 없습니다.
  • 호스트 A와 호스트 C 모두 정기적인 프로세스를 실행하고 예약할 수 있습니다.
  • 호스트 B는 저장 영역만 제공하며 SSH를 통해 호스트 A와 호스트 C 모두에서 액세스할 수 있습니다.
  • B는 "수동적"이며 저장 영역만 제공합니다.
  • 따라서 A는 (B에 있는 파일의) 작성자 역할을 하고, C는 (B에 있는 파일의) 판독기 역할을 합니다.
  • 호스트 A에서 호스트 C로(B를 통해) 성공적으로 복사된 파일은 호스트 A에서 삭제할 수 있습니다.
  • 호스트 C에 성공적으로 도착했다는 보장(파일 체크섬이 포함된 영수증?)이 있을 때까지 호스트 A의 파일을 삭제해서는 안 됩니다.
  • 코너 케이스에는 네트워크 가동 중지 시간, 디스크 가득 참, 프로세스 중단 등의 관리가 포함됩니다.

목표는 정기적으로 B를 중간 저장 영역으로 사용하여 A에서 C로 파일을 이동하는 것입니다.

모든 호스트가 Unix/Linux를 실행하고 있다고 가정할 수 있습니다. 선호되는 도구: ssh/rsync/bash + 기타 "표준" 도구.

저는 두 단계로 rsync 주변의 일부 bash 스크립트를 사용하고 체크섬이 포함된 영수증을 사용하여 파일이 성공적으로 이동된 시기를 감지하는 솔루션을 만들 생각이었습니다.

기존 솔루션이 있나요?

답변1

B에 아무것도 저장할 필요가 없다고 생각합니다. SSH 포트 전달이나 양말과 같은 프록시 소프트웨어를 사용하여 A와 C 간의 연결을 프록시하는 데 사용할 수 있습니다. 어쩌면 B를 통해 라우팅/nat를 할 수도 있을까요?

또는 특별히 요청한 대로 NFS/Samba를 사용하여 파일을 복사하고 다양한 방법을 사용하여 완료를 확인할 수 있습니다. 염두에 두어야 할 것은 두 시스템 간에 "복사 완료" 또는 "삭제 확인" 유형 메시지를 전달하기 위해 공유에 파일을 생성하는 것입니다. 아니면 당신이 말한 것처럼 MD5 등... 어떻게 하든 맞춤형 작업이 될 것이라고 확신합니다. 그러나 어려운 것은 아닙니다. 그런 식으로 문제를 처리하는 기존 방법이 있는지 의심됩니다.

답변2

귀하의 질문에 대한 Sven의 의견은 확실히 올바른 방법입니다.

다음과 같이 할 수 있습니다:

  1. ASSH 에서 까지 B, 포트 5000에 터널 생성

    ssh someuser@B -L 5000:127.0.0.1:5000
    
  2. 해당 쉘에서 BSSH를 통해 '의 SSH 서버 C에서 종료되는 두 번째 터널을 생성합니다 .C

    ssh someuser@C -NL 5000:127.0.0.1:22
    
  3. 의 두 번째 터미널에서 A파일을 직접 재동기화하세요.C

    rsync -avz -e "ssh -p 5000" --progress --remove-source-files /source/directory [email protected]:/destination/directory
    

하나의 명령으로 1단계와 2단계에서 터널을 설정하는 것이 가능할 수도 있지만, 제가 수행한 빠른 테스트에서는 그렇게 할 수 없었습니다. B및 에 SSH 키를 설정해야 할 수도 있습니다 C.

복사 프로세스를 자동화하려면 다음과 같은 사항을 살펴봐야 할 수도 있습니다.autossh서비스를 통해 터널을 설정하고 해체합니다. 아니면 cron을 통해 할 수도 있습니다.

관련 정보