Perl如何处理密码提示?

时间:2011-06-01 19:15:18

标签: perl ssh passwords

我想通过Perl传递密码。在我的Perl脚本中,它会调用SSH,但在终端被提升为密码时会卡住。

我已经研究过使用NET :: SSH :: Perl和其他库,但截至目前它们不是可行的选择。我只需要SSH进入机器,检索文件然后离开。

4 个答案:

答案 0 :(得分:3)

Net::SSH:Perl外,还有Net::SSH2Net::OpenSSH。你有什么尝试,你和他们有什么问题?

答案 1 :(得分:2)

Expect是将与/dev/tty对话的应用程序自动化为ssh的标准方法。

但是,正如runrig已经指出的那样,CPAN特有的几个模块可用于SSH。有什么特别的原因因为你无法使用它们吗?

答案 2 :(得分:2)

你告诉我Net::SSH::Perl不起作用?您可以在连接时提供NET::SSH::Perl密码。

他们甚至在页面上给你一个例子:

my $ssh = Net::SSH::Perl->new("host1");
$ssh->login("user1", "pass1");

$ssh->cmd("foo");
$ssh->cmd("bar");

答案 3 :(得分:2)

使用Term::ReadPassword获取用户密码,然后将其用作所选SSH模块的选项。

由于您只需要获取文件并离开,您可以尝试使用LWP + LWP::Protocol::sftpNet::SFTP::Foriegn等SFTP模块。

以下是使用Net::SFTP::Foreign(也有很少依赖关系)的示例:

#!/usr/bin/perl
use strict;
use warnings;

use Term::ReadPassword;
use Net::SFTP::Foreign;

my $pass = read_password("Enter Password: ");
my %opts = (
  host => "my.host.com",
  user => "me",
  password => $pass,
);

my $sftp = Net::SFTP::Foreign->new(%opts);

$sftp->get('/home/me/path/to/file', 'local_file');