我想通过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::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');