如何在没有Perl脚本密码的情况下使用scp传输文件?

时间:2010-09-29 18:51:34

标签: perl passwords scp

我正在编写一个需要使用scp在计算机之间传输文件的Perl脚本。我知道公钥认证,但我需要脚本完全自动化,因此在脚本运行之前我无法访问机器来设置密钥。

有没有办法将密码从Perl脚本传递给scp或从perl脚本中设置密钥?

此脚本将作为构建脚本的一部分运行,该脚本还会重新映像运行脚本所需的硬盘驱动器。因此,每次构建项目时,我都无法在那里设置密钥。

6 个答案:

答案 0 :(得分:3)

您可以使用Net::SSH::Perl。以下是您可以使用的示例代码。

#!/usr/bin/perl -w
use strict;
use Net::SSH::Perl
my $cmd = 'command';
my $ssh = Net::SSH::Perl->new("hostname", debug=>0);
$ssh->login("username","password");
my ($stdout,$stderr,$exit) = $ssh->cmd("$cmd");
print $stdout;

此代码将在远程计算机上运行给定的“命令”,并在本地系统上为您提供输出。因此,代替scp,您可以将此脚本与命令'cat'一起使用来捕获本地系统上'cat filename'的输出,并将输出重定向到本地系统上的文件中。

希望这有帮助。

答案 1 :(得分:2)

使用ssh-agent。如果你使用Gnome,Gnome Keyring SSH Agent就很棒了。

答案 2 :(得分:1)

您可以使用Perl Expect模块,请参阅an example at Well House consultants' forum

其文档有telnet example,可以轻松更改为SSH。

Net::SSH::Expect是另一个Perl模块,可以完全按照您的意愿执行。不过我以前没用过这个。

答案 3 :(得分:0)

只需创建没有密码的密钥。

答案 4 :(得分:0)

您可以使用SSH-Key(无密码)。

答案 5 :(得分:0)

#!/usr/bin/perl -w
######################################################
#                                                    #
#                                #
#       Script to send files to server    #
#               Author: Jurison Murati               #
#                                   #
######################################################

use strict;
use Net::SCP::Expect;
use File::Copy;
use IO::Compress::Gzip qw(gzip $GzipError);
my $host = "192.168.0.1";
my $user = "user";
my $pwd = "password";
my $RemoteDir = </nodes>;
my $file;
my $displaydate= `date +'%Y%m%d%H%M%S'`;
print "Filloi dergimi date $displaydate\n";
my $scp = Net::SCP::Expect->new(host=>$host,user=>$user,password=>$pwd,recursive=>1);
my $dir = '/arch';
        opendir(DIR, $dir) or die $!;
while (my $file = readdir(DIR)) {
next if ($file =~ m/^\./);
        $scp->scp("$dir/$file","$RemoteDir") or die $scp->{errstr};
print "file $dir/$file moved on date $displaydate\n";
}
exit 0;