Linux 不使用ssh的远程目录比较和合并

Linux 不使用ssh的远程目录比较和合并,linux,rsync,scp,beyondcompare,meld,Linux,Rsync,Scp,Beyondcompare,Meld,我有两台远程服务器/机器,比如s1和s2(基于linux的机器) 这两个服务器都有一个非常大的目录。(我指两台机器中最初相同的数据) 现在的要求是使s2的内容与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

我有两台远程服务器/机器,比如s1和s2(基于linux的机器) 这两个服务器都有一个非常大的目录。(我指两台机器中最初相同的数据)

现在的要求是使s2的内容与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.

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

如果你说你有
scp
,那么你也必须有
ssh
scp
需要
ssh
才能工作。因此,我将首先挑战您不能通过ssh使用rsync的假设。如果您有
scp
工作,那么没有理由
rsync
over
ssh
不工作

rsync
over
ssh
是这里的正确答案。这是在两个不同服务器之间同步内容的最有效机制。但是,我认为有可能有人认为他知道自己在做什么,但他确实不知道,他入侵了一台服务器,只允许
scp
服务,并阻止
ssh
会话。这可能是一个错误的想法,认为这样做可以在某种程度上提高安全性。事实并非如此,但这是另一个话题。那么,现在呢

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

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


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

如果您决定采用Perl方法,请不要使用Net::sftp,它是一个旧的、未维护的模块。顺便说一句,它实现了递归下载,允许您选择动态获取哪些文件,这样您就可以轻松地进行更新

另一种选择是使用我的另一个模块Net::SSH::Any,该模块具有内置的scp客户端,只能下载远程端较新的文件:

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

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

openSSH。只允许rsync。Profit.scp和sftp都需要ssh,那么为什么不能使用ssh呢?另外,看看rsync,你可能会发现它在这里是合适的。
my $ssh = Net::SSH::Any->new(...);
$ssh->scp_get( { recursive => 1,
                 update => 1 },
               $remote_dir, $local_dir );