2014-11-20 8 views
2

У меня есть 2 удаленных сервера/машины say s1 и s2 (машины на основе Linux) Оба сервера имеют 1 каталог, который очень велик. (Я имею в виду изначально те же данные в обеих машинах)Удаленный каталог сравнения и слияния без ssh

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

Теперь требование, чтобы содержание s2 к InSync с s1.

Состояние:

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

Открыть ssh. Разрешить только rsync. Прибыль. –

+0

scp и sftp оба требуют ssh, так почему вы не можете использовать ssh? Также - загляните в rsync, вы можете найти здесь уместное. – user239546

ответ

5

Если вы говорите, у вас есть scp, тогда у вас также должно быть ssh. scp требуется ssh для работы. Итак, я начну с оспаривания вашего предположения, что вы не можете использовать rsync поверх ssh. Если у вас есть scp, то нет причин, по которым rsync над ssh не должен работать.

rsync более ssh - правильный ответ здесь. Это самый эффективный механизм синхронизации контента между двумя разными серверами. Но, полагаю, возможно, что кто-то, кто считает, что он знает, что он делает, но он этого не делает, взломал сервер, чтобы разрешить только услугу scp, и блокировать ssh сеансов. Вероятно, ошибочное представление о том, что это как-то улучшает безопасность. Это действительно не так, но это другая тема. Итак, что теперь ...

Ну, вы говорите, что у вас есть sftp Доступ доступен. В этом случае следующим лучшим ответом будет пользовательский клиент sftp. Изучите perl и используйте модуль Net::SFTP, чтобы написать собственный скрипт perl, для вашего конкретного требования, использовать SFTP для сравнения содержимого двух серверов и синхронизации их содержимого.

Net::SFTP раскрывает основополагающий протокол SFTP таким образом, который позволяет писать пользовательские приложения, которые его используют. Вы будете использовать протокол SFTP для проверки содержимого каждого сервера, выяснить, что по-другому, а затем скопировать то, что нужно скопировать, чтобы обновить их содержимое.

Использование Net::SFTP не будет таким эффективным, как использование rsync + ssh. С Net::SFTP вы узнаете, какие файлы существуют на сервере, и размер каждого файла в байтах. Однако, если на обоих серверах есть файл с тем же именем и один и тот же счетчик байтов, вы действительно не знаете, идентичны ли они, не загружая каждый файл и не сравнивая их вручную. Конечно, вам придется это сделать. Это ключевое преимущество rsync+ssh, что у вас нет эквивалента sftp. Сервер rsync работает вместе с клиентом rsync, и они могут проверить, что содержимое файла идентично, с использованием контрольных сумм, без фактической передачи файла с одной стороны на другую. Невозможно избежать этого с sftp в этом случае, но это будет лучшее, что вы сможете сделать.

1

Если вы решили пройти маршрут Perl, не используйте Net :: SFTP, который является старым неподдерживаемым модулем. Вместо этого перейдите для Net::SFTP::Foreign, который BTW, реализует рекурсивные загрузки, позволяя вам выбирать, какие файлы нужно «летать», чтобы вы могли легко сделать обновление.

Другой альтернативой является использование development version другого моего модуля Net :: SSH :: Любой, который имеет встроенный Scp клиент, который имеет возможность загрузить только те файлы, которые новее на удаленной стороне:

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

Другие языки сценариев, такие как Python или Ruby, также имеют библиотеки SFTP и SCP.