【问题标题】:How to read the password from the text file in perl如何从perl中的文本文件中读取密码
【发布时间】:2013-09-18 11:40:37
【问题描述】:

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

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

【问题讨论】:

  • 当您使用 SSH FTP 时,您真的想通过以纯文本形式存储密码来破坏安全性吗?我看到有一个选项key_path,您可以在其中存储身份验证密钥的文件名。
  • 我是 perl 的新手,我不想在脚本中硬编码密码,我想从文件中读取密码并仅将读取权限授予特定用户。有什么方法可以做到这一点
  • 谷歌“ssh 生成密钥”。您所做的基本上是为您要登录的服务器设置一对密钥,然后登录是自动的。
  • 我不想通过 ssh 生成密钥。任何其他方式
  • 为什么不呢?这是自动登录的常用方法。

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


【解决方案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);
}

【讨论】:

  • 无需为单行密码执行$/ 操作。如果你有不止一行,密码无论如何都不起作用。
  • @TLP 你是对的,但是 ikegami 在某处写道$str = &lt;$fh&gt; 是个坏主意,所以我避免这样做。
  • 我怀疑他是那个意思。这将使 Perl 的大部分文件 IO 无效。
  • 我没见过。
【解决方案2】:

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

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

【讨论】:

  • 你有什么步骤吗?
  • 在环境变量中传递密码是非常不安全的,因为任何登录到机器的人都可以看到它们(运行 ps ae 并查看)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多