如何从Perl文本文件中读取密码

我是新的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; 

在这里,我有硬编码的密码,我想避免在脚本中的密码,是否有任何其他方法来从文件中读取密码或任何方法吗?

我在stackoverflowsearch和谷歌,我不知道如何使用这个。 我在下面尝试。

 PASSWORD=`cat /home/sar/passwd_file.txt` my $password = $ENV{'PASSWORD'} 

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

你可以用权限有限的文件存储密码,但使用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); } 

为了完全像你所描述的那样,首先创建一个shell脚本,在其中运行PASSWORD环境变量设置命令,然后启动正在写入的perl脚本。 当然,将你在脚本中找到的第二条(perl)行结合起来。

尽管如此,你应该考虑使用其他形式的认证。