我是新的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)行结合起来。
尽管如此,你应该考虑使用其他形式的认证。