Perl期待另一个期待

时间:2014-07-16 12:19:59

标签: perl permissions passwords expect

我正在使用Perl和Bash建立一些SSH连接。

现在,我有这个代码,它运行良好:

$exp->spawn("ssh -o ConnectTimeout=$connectTimeout $user\@$ip") or die ("unable to spawn \n");

@obj=$exp->expect( $commandTimeout,
    [ qr/[Pp]assword:\s*/ => sub 
        {
        my $exp = shift;
        $exp->send($passwdused, "\n");  #ecriture du mot de pass routeur
        $exp->send("term length 0", "\n");
        $exp->expect($commandTimeout2,);
        executeCommands();
        }   
    ],
    [ qr/.*Are you sure you want to continue connecting.*/ => sub   #si on voit "Are you sure you want to 
        {                           #continue connecting" ecrit sur le routeur
        my $exp = shift;                #on execute la sous-fonction
        $exp->send("yes\n");
        exp_continue;
        }
    ],
    [ qr/.*refused.*/ => sub
        {
        my $exp = shift;                        #permet de renvoyer un message
        print ERR_REPORT "insert into erreur(code_site,ip,operateur,cause) VALUES ('$ARGV[0]','$ARGV[1]','$ARGV[2]','Connexion ssh refusee');\n";
        die ("Connexion refusee par l'hote distant\n");         #est refusee.
        }
    ],

以下很多案例如"网络无法访问"或者" RSA公共解密失败"。

但我不是在检查密码是否正确(这有点令人尴尬,因为Perl会继续执行并尝试发送命令)。

我可以期待[ qr/ [Pp]assword: \s*/ => sub function ]吗?

类似的东西:

@obj=$exp->expect( $commandTimeout,
    [ qr/[Pp]assword:\s*/ => sub 
        {
        @obj=$exp->expect( $commandTimeout,
            [ qr/.*Permission.*denied.*/ => sub 
            {
            #PRINT ERROR REPORT AND DIE HERE
            }
            ]);
        my $exp = shift;
        $exp->send($passwdused, "\n");  #ecriture du mot de pass routeur
        $exp->send("term length 0", "\n");
        $exp->expect($commandTimeout2,);
        executeCommands();
        }   
    ],

0 个答案:

没有答案