Perl Net :: SSH ::任何密钥交换

时间:2014-09-26 16:56:36

标签: perl ssh

我需要能够使用Perl来确定在我与其进行密钥交换的远程服务器上运行的python版本。为了尝试实现这一点,我一直在使用Net::SSH::Any但是想要使用密钥交换而不是在脚本中指定密码。我看过cpan的例子,它指定了密码。

以下是我的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;
    }
}

我怎么能这样做,还是有替代方法来完成同样的事情?

1 个答案:

答案 0 :(得分:3)

根据Net::SSH::Any的文档,您需要传递主机名选项对:

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