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

Linux 如何在perl中从文本文件中读取密码,linux,perl,sftp,perl-module,password-protection,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/D

我不熟悉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'}

请您帮助我解决此代码。

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


安全性不高,您应该考虑使用其他形式的认证。

您可以在有限权限的文件中存储密码,但是使用SSH密钥仍然是更好的解决方案。
my $sftp = Net::SFTP::Foreign->new(
    'auser@sftp.rent.com',
    password => get_passw("chmod_600_passw_file"),
    more     => ['-v']
);


sub-get\u凭证{
我的($file)=@;

打开我的$fh,"当您使用SSH FTP时,您真的想通过将密码存储为纯文本来破坏安全性吗?我看到有一个选项
key\u path
,您可以在其中存储身份验证密钥的文件名。我是perl新手,我不想在脚本中硬编码密码,我想从文件中读取密码并给出读取的pe只向特定用户发送。如何实现此Google“ssh生成密钥”。您所做的基本上是为要登录的服务器设置一对密钥,然后登录是automagic。我不想通过ssh生成密钥。还有其他方法吗?这是自动登录的常用方法。您有什么步骤吗?在环境变量中传递密码是非常不安全的,因为任何登录到机器的人都可以要查看它们(运行
ps ae
并查看)对于一行密码,无需执行
$/
操作。如果您有多行密码,则密码无论如何都不会起作用。@TLP您是对的,但ikegami在某个地方写道
$str=
是个坏主意,因此我避免这样做。我怀疑他是那个意思。这将使Perl的大部分文件IO无效。@TLP是关于读取三行f如果建议计数为3,则rom文件和
,而
最后一个
。我没有看到。
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);
}