Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用ssh或FTP Perl模块的情况下从远程系统复制数据?_Perl_Ssh - Fatal编程技术网

如何在不使用ssh或FTP Perl模块的情况下从远程系统复制数据?

如何在不使用ssh或FTP Perl模块的情况下从远程系统复制数据?,perl,ssh,Perl,Ssh,我必须编写一个Perl脚本来自动将数据从远程服务器复制到本地系统。远程系统上的目录结构为: ../log/D1/<date>.tar.gz ../log/D2/<date>.gz ../log/D3/<date>.tar.gz ../log/D4/<date> 。/log/D1/.tar.gz ../log/D2/.gz ../log/D3/.tar.gz ../log/D4/ 在其他服务器上也是如此。我想用下面的格式复制本地系统上的数据 ..

我必须编写一个Perl脚本来自动将数据从远程服务器复制到本地系统。远程系统上的目录结构为:

../log/D1/<date>.tar.gz
../log/D2/<date>.gz
../log/D3/<date>.tar.gz
../log/D4/<date>
。/log/D1/.tar.gz
../log/D2/.gz
../log/D3/.tar.gz
../log/D4/
在其他服务器上也是如此。我想用下面的格式复制本地系统上的数据

../log/S1/D1/<date>.tar.gz
../log/S1/D2/<date>.gz
../log/S1/D3/<date>.tar.gz
../log/S1/D4/<date>
。/log/S1/D1/.tar.gz
../log/S1/D2/.gz
../log/S1/D3/.tar.gz
../log/S1/D4/
其他服务器(如S2、S3等)也是如此

另外,远程服务器和本地服务器上都没有支持ssh的Perl模块,我没有安装任何Perl模块的权限。唯一的好处是,连接是通过无密码的ssh密钥实现的

#!/bin/bash

DATE=`date`
BASEDIR="/basedir"
cd $BASEDIR

for HOST in S1 S2 S3
do

        scp -q $HOST:$BASEDIR/D1/$DATE.tar.gz $HOST/D1/
        echo "Data copy from $HOST done"
done
exit 0

有人能给我推荐一些Perl代码来完成这个任务吗?

我相信您可以从Perl访问shell命令

所以你可以这样做:

$cmd = "/usr/bin/scp remotefile localfile";
system $cmd; 
$cmd=“/usr/bin/scp remotefile localfile”;
系统$cmd;
注意:scp是安全拷贝——ssh的伙伴

这不需要ssh-perl模块,但需要两者上的ssh支持(我已经有了)


希望这能有所帮助。

我开始建议使用
scp
命令行程序,但似乎有一个CPAN模块(毫不奇怪)。退房


通过在客户机上使用
scp
(您可以在其中安装新的Perl模块),您可以复制文件,而无需在远程系统上安装任何新软件。它只需要运行ssh服务器,正如您所说的那样。

我要说的是,不要再让自己的生活变得艰难,让系统支持您所需要的功能

从长远来看,试图为这样一个有限/封闭的平台开发是不划算的——你会开发得更慢,而且会有更多的bug

一点开发时间比一个像样的托管VM/硬件盒要昂贵得多


找一个合适的主机,这肯定会省钱(跟你的经理谈谈这个问题)。

从你上面的查询中,我了解到你没有多少权限安装perl模块或进行任何需要管理权限的更改。我喜欢perl,但要使这样的事情自动化,应该使用bash而不是perl。下面是我在使用无密码ssh密钥时使用的示例代码

#!/bin/bash

DATE=`date`
BASEDIR="/basedir"
cd $BASEDIR

for HOST in S1 S2 S3
do

        scp -q $HOST:$BASEDIR/D1/$DATE.tar.gz $HOST/D1/
        echo "Data copy from $HOST done"
done
exit 0
对于YYYYMMDD格式的当前日期,可以使用不同的日期格式,如
date+%Y%m%d
。你也可以用它来学习不同的日期格式


希望这能有所帮助。

您可能无法在系统范围的
lib
目录中安装任何内容,但没有任何东西阻止您在具有写访问权限的位置安装模块。看

这只会产生一个安全问题,首先允许您在此系统上编写脚本


所以,继续安装。

听起来您需要rsync。你根本不应该做任何编程