0

我是 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和google中搜索,我不知道如何使用它。我试过下面一个。

PASSWORD=`cat /home/sar/passwd_file.txt`

my $password = $ENV{'PASSWORD'}

你能帮我解决这个代码吗?

4

2 回答 2

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);
}
于 2013-09-18T12:08:06.663 回答
0

要完全按照您的概述进行操作,首先创建一个 shell 脚本,在其中运行 PASSWORD 环境变量设置命令,然后启动您正在编写的 perl 脚本。当然,将您找到的第二行 (perl) 合并​​到您的脚本中。

不过,它不会更安全,您应该考虑使用其他形式的身份验证。

于 2013-09-18T11:48:01.310 回答