2014-11-20 2 views
2

2 개의 원격 서버/시스템이 s1 및 s2라고 말합니다 (Linux 기반 시스템) 두 서버 모두 매우 큰 하나의 디렉토리가 있습니다.원격 디렉토리 비교 및 ​​ssh없이 병합

s1 is always stable upto date, changes are added by authorized user. 
s2 people will make changes to the data here and there. 

이제 요구 사항은 S1과 INSYNC에 (S2)의 내용을 확인하는 것입니다 (내가 처음에 두 시스템에서 동일한 데이터를 의미한다).

상태 : 사람이 필요 이런 종류의 건너 경우

1. No replacement of s2 content with s1 because data is very huge 
2. No other software allowed to install in machines 
3. Only scp, sftp supported, no ssh or any other sort of access is given because it is production machine. 

나에게 어떤 도구,이 작업을 수행 할 수있는 방법을 제안 해주십시오.

+5

Open ssh. rsync 만 허용합니다. 이익. –

+0

scp와 sftp 모두 ssh가 필요하므로 ssh를 사용할 수없는 이유는 무엇입니까? 또한 rsync를 살펴보면 여기에서 적절할 수도 있습니다. – user239546

답변

5

scp이 있다면 ssh이어야합니다. scp을 사용하려면 ssh이 필요합니다. 그래서 ssh에 rsync를 사용할 수 없다는 가정에 도전하여 시작하겠습니다. scp이 작동하는 경우 rsync 이상 ssh이 작동하지 않아야하는 이유가 없습니다.

rsyncssh 이상이 정답입니다. 이것은 두 개의 서로 다른 서버간에 컨텐츠를 동기화하는 가장 효율적인 메커니즘입니다. 그러나 그가 생각하는 사람이 자신이하는 일을 알고 있다고 생각할 수도 있지만 실제로 서버를 해킹하여 scp 서비스 만 허용하고 세션은 ssh 개를 차단해야합니다. 아마도 이것이 어떻게 든 보안을 향상 시킨다는 오해의 개념하에있을 것입니다. 정말로 그렇지 않지만 다른 주제입니다. 그럼, 지금은 ...

글쎄, 당신은 sftp 액세스 할 수 있다고 해. 이 경우 가장 좋은 대답은 맞춤 sftp 고객입니다. perl에 대해 배우고 Net::SFTP 모듈을 사용하여 특정 요구 사항에 맞게 사용자 정의 perl 스크립트를 작성하고 SFTP를 사용하여 두 서버의 내용을 비교 한 다음 해당 내용을 동기화하십시오.

Net::SFTP은 기본 SFTP 프로토콜을 사용하는 사용자 지정 응용 프로그램을 작성할 수있는 방식으로 기본 SFTP 프로토콜을 노출합니다. SFTP 프로토콜을 사용하여 각 서버의 내용을 검사하고 차이점을 파악한 다음 복사해야 할 내용을 복사하여 내용을 업데이트합니다.

Net::SFTP을 사용하면 rsync + ssh를 사용하는 것보다 효율적이지 않습니다. Net::SFTP을 사용하면 서버에있는 파일과 바이트 단위의 각 파일 크기를 알 수 있습니다. 그러나 두 서버의 이름이 같고 바이트 수가 같은 파일이있는 경우 실제로 동일한 파일인지, 각 파일을 다운로드하지 않고 수동으로 비교하는지 여부는 실제로 알 수 없습니다. 물론 그렇게해야 할 것입니다. rsync+ssh의 주요 이점은 sftp에 해당하지 않는 것입니다. rsync 서버는 rsync 클라이언트와 함께 작동하며 실제로 파일을 한 쪽에서 다른 쪽으로 전송하지 않고 체크섬을 사용하여 파일 내용이 동일하다는 것을 확인할 수 있습니다. 이 경우 sftp을 사용하지 않는 방법은 없지만 최선의 방법이 될 것입니다.

1

Perl 경로로 이동하려면 이전에 유지 관리되지 않은 모듈 인 Net :: SFTP를 사용하지 마십시오. 대신 Net::SFTP::Foreign에 가서 BTW를 사용하면 재귀 적 다운로드를 구현하여 즉시 실행할 파일을 선택할 수 있으므로 쉽게 업데이트 할 수 있습니다.

또 다른 대안은 내 다른 모듈 그물이있는 모든 :: SSH ::의 development version을 사용하는 것입니다 내장 된 원격 측에 새로운 파일 만 다운로드 할 수 있습니다 SCP 클라이언트 :

my $ssh = Net::SSH::Any->new(...); 
$ssh->scp_get({ recursive => 1, 
       update => 1 }, 
       $remote_dir, $local_dir); 

Python이나 Ruby와 같은 다른 스크립팅 언어에도 SFTP 및 SCP 라이브러리가 있습니다.