远程目录比较和合并没有ssh

时间:2014-11-20 06:23:25

标签: linux rsync scp beyondcompare meld

我有2个远程服务器/机器说s1和s2(基于linux的机器) 服务器都有1个非常庞大的目录。 (我的意思是最初两台机器都有相同的数据)

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

现在的要求是使用s1将s2的内容设为inSync。

条件:

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.

如果有人遇到这种要求请建议我任何工具,任何方式来完成这项任务。

2 个答案:

答案 0 :(得分:5)

如果您说scp,那么您还必须拥有sshscp需要ssh才能运作。所以,我首先要挑战你不能在ssh上使用rsync的假设。如果您scp有效,那么rsync ssh超过rsync就没有理由不起作用。

ssh超过scp是正确答案。这是在两个不同服务器之间同步内容的最有效机制。但是,我认为有可能是那些认为自己知道自己在做什么,但实际上并非如此的人,将服务器入侵以仅允许ssh服务,并阻止sftp个会话。可能在一个错误的观念下,这会以某种方式提高安全性。它确实没有,但这是一个不同的主题。那么,现在......

嗯,你说你确实有sftp访问权限。在这种情况下,下一个最佳答案是自定义Net::SFTP客户端。学习perl,并使用Net::SFTP模块编写自定义perl脚本,以满足您的特定需求,使用SFTP比较两个服务器的内容,并同步其内容。

Net::SFTP以允许用户编写使用它的自定义应用程序的方式公开底层SFTP协议。您将使用SFTP协议检查每个服务器的内容,找出不同的内容,然后复制需要复制的内容,以便更新其内容。

使用Net::SFTP不如使用rsync + ssh有效。使用rsync+ssh,您将知道服务器上存在哪些文件,以及每个文件的大小(以字节为单位)。但是,如果两个服务器看起来都有一个具有相同名称和相同字节数的文件,那么您实际上并不知道它们是否完全相同,而不下载每个文件,并手动比较它们。当然,你必须这样做。这是sftp的关键优势,即您没有rsync等效的。{1}}。 rsync服务器与sftp客户端一起工作,他们能够使用校验和验证文件内容是否相同,而无需将文件从一侧实际传输到另一侧。在这种情况下,无法避免使用{{1}},但这将是您能够做到的最好的。

答案 1 :(得分:1)

如果您决定使用Perl路由,请不要使用Net :: SFTP,这是一个旧的非维护模块。取而代之的是Net::SFTP::Foreign BTW,实现递归下载,允许您选择要动态获取的文件,这样您就可以轻松地进行更新。

另一个替代方法是使用我的其他模块Net :: SSH ::任何具有内置scp客户端的development version,该客户端只能下载远程端较新的文件:< / p>

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

其他脚本语言(如Python或Ruby)也有SFTP和SCP库。