我想通过Perl传递密码。在我的Perl脚本中,它会调用SSH,但在终端被提升为密码时会卡住。
我已经研究过使用NET :: SSH :: Perl和其他库,但截至目前它们不是可行的选择。我只需要SSH进入机器,检索文件然后离开。
答案 0 :(得分:3)
除Net::SSH:Perl外,还有Net::SSH2和Net::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::sftp
或Net::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');