需要帮助通过scp / sftp将$ cmd输出复制到第二台服务器。我有这个代码;工作正常,但需要很长时间,因为$ cmd输出大约是700MB,15000行。
use warnings;
use Net::SSH2;
my ($host, $user, $password, $outfile) = @ARGV;
my $cmd = "show zoneset active";
my $ssh = Net::SSH2->new();
$ssh->connect($host);
$ssh->auth_keyboard($user, $password);
my $channel = $ssh->channel();
$channel->exec($cmd);
open OUTPUT, ">", "$outfile";
while (<$channel>) { print OUTPUT };
$channel->close;
$ssh->disconnect;
答案 0 :(得分:0)
给出一些假设:
show zoneset active
的输出稍有变化,但每次运行时变化不大然后,最好的办法是在远程服务器上创建文件,然后使用rsync(可能带有File::Rsync
)在本地服务器上的现有副本上获取文件。
来自man rsync
:
Rsync是一种快速且极其通用的文件复制工具。它可以 通过任何远程shell,或从/到本地复制到另一个主机 远程rsync守护进程。它提供了大量可控制的选项 其行为的每个方面都允许非常灵活的规范 要复制的文件集。它以delta传输算法而闻名, 通过仅发送来减少通过网络发送的数据量 源文件与现有文件之间的差异 目的地。 Rsync广泛用于备份和镜像,以及作为 改进了日常使用的复制命令。