openSSH - 无法调用方法捕获

时间:2014-06-17 08:17:12

标签: perl ssh capture openssh

我正在使用PERL的NET::OpenSSH模块。我在简单的脚本上尝试过它并且它工作得很好。

现在我将它包含在一个更大的脚本中:

switch ($ARGV[2]) {

case "OBS" {

    my $ssh = Net::OpenSSH->new("$user:$passwdobs\@$ARGV[1]");
    if ($ssh->error) {
        print ERR_REPORT_SSH "Echec ssh sur " . $ARGV[1] . " erreur a gerer plus tard\n";
        die "Echec du ssh sur " . $ARGV[1] . "\n";
    }
}

我有2个与此类似的案例,只有"案例" OBS""正在改变,密码也随之改变。 变量$ ssh绝不是未初始化的。

在脚本中,我写了这个:

open(SSHCONFIG, "/tech/gtr/scripts/osm/environnement_qualif/scan-rh2/bin/ssh.conf");
while (<SSHCONFIG>) {
    @ligne = split(/;/, $_ );
    $listop = $ligne[0];
    $listcmd = $ligne[1];
    $fileprefix = $ligne[2];

    if ($listop =~ /$operateur/) {
        print "l'operateur match\n" . "commande : " . $listcmd . "\n";
        #sendCommand($listcmd, $fileprefix);
        my $out1 = $ssh->capture($listcmd);
        print $out1 ;
    }
    else {
        next;
    }
}

虽然&#34; ssh.conf&#34;文件,脚本应该执行文件中给出的命令。 但是,启动时,脚本会因此错误而停止:

l'operateur match
commande : show arp
Can't call method "capture" on an undefined value at sshscript.pl line 65, <SSHCONFIG> line 1.

我的$ listcmd变量不是空的,你可以看到。 为什么它不能调用捕获方法? 感谢。

1 个答案:

答案 0 :(得分:1)

变量$ssh超出case "OBS"块末尾的范围。

在脚本开头可以轻松捕获这种错误:

use strict;
use warnings;
顺便说一句,不要使用Switch,它是按设计破解的,可能会在您的脚本上引入很难找到错误。