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

时间:2009-10-28 07:23:40

标签: perl ssh

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

../log/D1/<date>.tar.gz
../log/D2/<date>.gz
../log/D3/<date>.tar.gz
../log/D4/<date>

和其他服务器上的相同。我想以下面的格式复制本地系统上的数据。

../log/S1/D1/<date>.tar.gz
../log/S1/D2/<date>.gz
../log/S1/D3/<date>.tar.gz
../log/S1/D4/<date>

和其他服务器相同,即S2,S3等

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

任何人都可以建议我使用任何Perl代码来完成这项工作吗?

6 个答案:

答案 0 :(得分:4)

我相信你可以从perl访问shell命令。

所以你可以这样做:

$cmd = "/usr/bin/scp remotefile localfile";
system $cmd; 

注意:scp是安全副本 - ssh的伙伴。

这不需要ssh-perl模块,但它需要ssh支持(我有)。

希望这有帮助。

答案 1 :(得分:2)

我开始建议scp命令行程序,但似乎有一个CPAN模块(毫不奇怪)。查看Net::SCP

通过在客户端上使用scp(您可以在其中安装新的Perl模块),您无需在远程系统上安装任何新软件即可复制文件。它只需要运行ssh服务器 - 你已经说过了。

答案 2 :(得分:1)

我会说停止尝试让自己的生活变得困难,让系统支持你需要的功能。

从长远来看,尝试开发这样一个有限/锁定的平台并不具有成本效益 - 你会更慢地开发内容并且会有更多错误。

开发人员的时间比一个体面的托管VM /硬件盒更贵。

获得一个合适的主持人,这肯定会省钱(与你的经理谈谈这个)。

答案 3 :(得分:1)

从上面的查询中我了解到您没有太多权限来安装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

您可以使用date +%Y%m%d等不同日期格式作为当前日期,格式为YYYYMMDD。您也可以使用此link来了解不同的日期格式。

希望这有帮助。

答案 4 :(得分:1)

您可能无法在系统范围的lib目录中安装任何内容,但没有任何东西阻止您在您具有写访问权限的位置安装模块。见How do I keep my own module/library directory?

除了允许您首先在此系统上编写脚本之外,这不会产生任何安全问题。

所以,请前往并安装Net::SCP

答案 5 :(得分:1)

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