Perl如何处理密码提示



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

我已经研究过使用NET::SSH::Perl和其他库,但到目前为止,它们还不是可行的选项。我只需要SSH进入机器,检索一个文件并离开。

除了Net::SSH:Perl,还有Net::SSL2和Net::OpenSSH。你试过什么,有什么问题吗?

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

不过,正如runrig已经指出的,CPAN中有几个模块是SSH特有的。有什么特别的原因是你不能使用它们吗?

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

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

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

使用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');

相关内容

  • 没有找到相关文章

最新更新