我正在使用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";
    }
}

我还有另外两种情况与此类似,只是“case“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;
    }
}

当“ssh.conf”文件中包含某些内容时,脚本应执行文件中给出的命令。
但是,启动后,脚本会因以下错误而停止:
l'operateur match
commande : show arp
Can't call method "capture" on an undefined value at sshscript.pl line 65, <SSHCONFIG> line 1.

如您所见,我的$ listcmd变量不为空。
为什么不能调用捕获方法?
谢谢。

最佳答案

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

可以很容易地发现此类错误,从而在脚本开始时启用约束:

use strict;
use warnings;

顺便说一句,不要使用Switch,它是设计破坏的,可能会导致难以在脚本中发现错误。

关于perl - openSSH-无法调用方法捕获,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24258901/

10-08 21:15