如何从perl中的文本文件中读取密码

时间:2013-09-18 11:40:37

标签: linux perl sftp perl-module password-protection

我是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'}

你能帮我解决一下这段代码。

2 个答案:

答案 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)合并。

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