如何使用Net :: SSH2复制文件?

时间:2013-03-29 19:26:03

标签: perl

需要帮助通过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;

1 个答案:

答案 0 :(得分:0)

给出一些假设:

  1. show zoneset active的输出稍有变化,但每次运行时变化不大
  2. 您想多次运行此命令
  3. 然后,最好的办法是在远程服务器上创建文件,然后使用rsync(可能带有File::Rsync)在本地服务器上的现有副本上获取文件。

    来自man rsync

      

    Rsync是一种快速且极其通用的文件复制工具。它可以   通过任何远程shell,或从/到本地复制到另一个主机   远程rsync守护进程。它提供了大量可控制的选项   其行为的每个方面都允许非常灵活的规范   要复制的文件集。它以delta传输算法而闻名,   通过仅发送来减少通过网络发送的数据量   源文件与现有文件之间的差异   目的地。 Rsync广泛用于备份和镜像,以及作为   改进了日常使用的复制命令。