【问题标题】:Perl Net::SSH::Any with Key ExchangePerl Net::SSH::Any with Key Exchange
【发布时间】:2018-07-13 14:59:05
【问题描述】:

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

以下是我的 Perl 代码中的 sn-p,我正在尝试确定远程服务器上是否安装了 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;
    }
}

我怎样才能做到这一点,或者是否有替代方法来完成同样的事情?

【问题讨论】:

    标签: perl ssh


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      相关资源
      最近更新 更多