1

编辑 1:删除了句子:“,首先“必须转义,例如\",但是”,我的错误是没有意义的。

编辑 2:添加了 $cmd 的内容

编辑 3:添加了可理解的代码示例

我在使用 Perl 的 Net::SSH::Expect 模块与瞻博网络设备 (JunOS) 通信时遇到问题。

在 JunOS 中,某些命令需要使用双引号。当我手动连接到设备时,会出现一个虚构的命令,例如:show something | 匹配“这个|那个”可以正常工作。

通过 Net::SSH::Expect 模块使用此命令时,该命令根本不会返回输出。

这是会话的打开方式

$session = Net::SSH::Expect->new(
                                host => $device->{ip},
                                port => $port // 22,
                                ssh_option => $options // '',
                                user => $username,
                                password => $password,
                                raw_pty => 1,
                                timeout => $session_timeout)

并且正在使用“$session->send($cmd);”发送命令 ,然后使用 before() 函数检索。

$session->send($cmd);
                
unless($session->waitfor($device->{promptSSH}, $cmd_timeout)) {
    $logger->warn("$device->{hostname} ($device->{ip}) : SSH - Echec (Timeout) de la commande $cmd");
    $data->{'timeout'} = 1; # status flag
} 
@{$data->{'output'}} = $session->before();
return $data;

其中 $cmd 将根据示例包含:show interfaces diagnostics optics | 匹配“激光输出功率|激光接收器功率”

当我们转义双引号时输出

如果我不转义双引号,我们会得到这个奇怪的输出

如果我们不转义双引号,则输出

请注意,这些命令是从系统中的一个简单文本文件中读取的,这里是摘录

从中读取命令的文件的提取

我完全一无所知,有人可以帮助我吗?

干杯

4

0 回答 0