我是perl脚本的新手,下面的代码是从sftp服务器下载文件。
#!/usr/bin/perl
use strict;
use warnings;
use Net::SFTP::Foreign;
my $sftp = Net::SFTP::Foreign->new(
'auser@sftp.rent.com',
password => 'auser123',
more => ['-v']
);
$sftp->get('outgoing/DATA.ZIP', '/home/sar/')
or die "unable to retrieve copy: ".$sftp->error;
$sftp->disconnect;
这里我已经硬编码了密码,我想在脚本中避免使用密码,是否还有其他方法可以从文件中读取密码或者有任何方法吗?
我在stackoverflow和谷歌搜索,我不知道如何使用它。我试过下面的一个。
PASSWORD=`cat /home/sar/passwd_file.txt`
my $password = $ENV{'PASSWORD'}
你能帮我解决一下这段代码。
答案 0 :(得分:1)
您可以将密码存储在具有有限权限的文件中,但使用ssh密钥仍然是更好的解决方案。
my $sftp = Net::SFTP::Foreign->new(
'auser@sftp.rent.com',
password => get_passw("chmod_600_passw_file"),
more => ['-v']
);
sub get_passw {
my ($file) = @_;
open my $fh, "<", $file or die $!;
my $pass = <$fh>; # do { local $/; <$fh> };
chomp($pass);
return $pass;
}
如果您希望同时存储用:
分隔的用户/传递文件,
my $sftp = Net::SFTP::Foreign->new(
get_credentials("chmod_600_passw_file"),
more => ['-v']
);
sub get_credentials {
my ($file) = @_;
open my $fh, "<", $file or die $!;
my $line = <$fh>;
chomp($line);
my ($user, $pass) = split /:/, $line;
return ($user, password => $pass);
}
答案 1 :(得分:0)
为了完全按照您的描述进行操作,首先创建一个shell脚本,在该脚本中运行该PASSWORD环境变量设置命令,然后启动您正在编写的perl脚本。当然,将您在脚本中找到的第二行(perl)合并。
虽然它不会更安全,但您应该考虑使用其他形式的身份验证。