2014-09-26 49 views
3

我需要能够使用Perl来确定在我有密钥交换的远程服务器上运行的python版本。要尝试完成此操作,我一直在使用Net::SSH::Any,但想要使用密钥交换,而不是在脚本中指定密码。我已经看过指定密码的cpan示例。Perl Net :: SSH ::任何与密钥交换

以下是我的Perl代码片段,我试图确定是否在远程服务器上安装了python 2.6。

my $ssh  = Net::SSH::Any->new($curIP, 'root'); 
my @out  = $ssh->capture("python -V"); 
my $outSize = @out; 
my $ver26 = 0; 
for (my $j = 0; $j < $outSize; $j++) { 
    if (index($out[$j], "2.6.") != -1) { 
     $ver26 = 1; 
    } 
} 

当我运行它,它抱怨,说一台主机需要指定:

强制参数主机丢失在./GenerateConfig.pl线162

我修改了代码看起来类似于这是如何在不同的帖子(How can I FTP a file with an SSH key instead of a password, in Perl?)中完成的,但它也失败了:

my $ssh  = Net::SSH::Any->new($curIP, {'root'}); 
my @out  = $ssh->capture("python -V"); 
my $outSize = @out; 
my $ver26 = 0; 
for (my $j = 0; $j < $outSize; $j++) { 
    if (index($out[$j], "2.6.") != -1) { 
     $ver26 = 1; 
    } 
} 

任何想法,我如何做到这一点,或完成相同的事情的替代品将不胜感激。

回答

3

根据对Net::SSH::Any的文档,你需要通过它的主机名双选项:

my $ssh = Net::SSH::Any->new($curIP, user => 'root'); 
+0

那么简单,THX!我一直在与它斗争一段时间... – 2014-09-26 17:35:52