0

ユーザー、パス、IP 引数を受け取り、それを使用して ssh 経由でネットワーク スイッチのバージョンを確認する Perl スクリプトを実行しようとしています。ただし、サーバーで実行すると、次のようになります。

Math::BigInt: couldn't load specified math lib(s), fallback to Math::BigInt::FastCalc at /usr/lib/perl5/site_perl/5.10.0/Crypt/DH.pm line 6

少しの間ハングした後、出力なしで戻ります。これが失敗する原因は何ですか?どうすれば回避できますか? サーバーに追加モジュールをインストールするアクセス権がありません。


編集: 現在インストールされているモジュールを確認しましたが、Net::SSH:Perl、Math::BigInt::FastCalc、および Math::Pari がすべてインストールされているため、これらのモジュールのロードに問題がある理由がわかりません。


参照用のスクリプトは次のとおりです。

#!/usr/bin/perl


# Outputs the name of the Flash File (which denotes the software version) of the switch
#Input: User Pass Host

open(FH, ">>unparsed.txt");
open (FH2, ">>versions.txt");

use strict;
use Net::SSH::Perl;

my $user = $ARGV[0];
my $pass = $ARGV[1];
my $host = $ARGV[2];  #Hostname given as command line argument
my $cmd = "show version";
my $version;

print("\n");
print($ARGV[2]);
print("\n");

my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass); # login to switch
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);

printf FH ($stdout); #output all test to file

close(FH);

open(FH, "unparsed.txt");

while(<FH>){  #look through file for flash filename
    if($_ =~ /System image file is "(.*)"/){
            $version = $1;
    }
}

print ($version); #output flash filename
print ("\n");

printf FH2 ($ARGV[2]);
printf FH2 ("\n");
printf FH2 ($version);
printf FH2 ("\n");

close(FH2);

close(FH);
4

3 に答える 3

2

Crypt::DHはMath::BigIntを次のように読み込みます:

use Math::BigInt lib => "GMP,Pari";

したがって、システムにはGMPまたはPariが必要です。

ディストリビューションのパッケージ マネージャーは、それらをインストールする手段を既に提供している場合があります。

Net::SSHを使ってみましたか?

于 2012-06-28T01:00:50.223 に答える
0

Net::SSH::Perl の代わりにNet::OpenSSHを使用してみてください。

于 2012-06-29T05:51:50.253 に答える