Bonjour,

j'ai un script qui parse un fichier txt rempli d'@IP.
pour chaque @IP, il se connecte dessus et passe des commandes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
while( defined( $host = <FIC2>)) {
 
    chomp($host);
 
    print "*** $host\n" if $verbose;
    print "*** Connexion sur le cpe\n" if $verbose;
 
    $expect = new Expect ();
 
    $expect->exp_internal(1) if $debug;
 
    $expect->raw_pty (1);
    $expect->log_stdout (0);
    $expect->spawn ('ssh -p <port number> mon_login@'.$host);
 
    $expect->expect(10,
      #premiere connexion ssh sur le cpe
      [ qr/yes\/no/ =>
        sub {
            $expect->send("yes\n");
            exp_continue;
        }
      ],
      #login en cas d'échec
      [ qr/ogin:/ =>
        sub {
            $expect->send("mon_login\n");
            exp_continue;
        }
      ],
      #mot de passe
      [ qr/assword:/ =>
        sub {
            $expect->send("mon_password\n");
            exp_continue;
        }
      ],
      #prompt v1, passage en enable
      [ qr/CPE>/ =>
        sub {
            $version = 1;
            $expect->send("enable\n");
            exp_continue;
        }
      ],
      #prompt v1, passage en mode wimax
      [ qr/CPE#/ =>
        sub {
            $expect->send("mode_wimax\n");
            exp_continue;
        }
      ],
      #prompt v1
      [ qr/CPE.*#/ =>
        sub { 1; }
      ],
      #prompt v2, passage en mode enable
      [ qr/MTxxxx>/ =>
        sub {
            $version = 2;
            $expect->send("enable\n");
            exp_continue;
        }
      ],
      #prompt v2, passage en mode wimax
      [ qr/MTxxxx#/ =>
        sub {
            $expect->send("mode_wimax\n");
            exp_continue;
        }
      ],
      #prompt v2
      [ qr/MTxxxx.*#/ =>
        sub { 1; }
      ],
      [ timeout =>
        sub {
            print "timeout\n";
            #ecriture dans les logs
            print ( FIC1 "$host\n");
        }
      ],
      [ eof =>
        sub { 1; }
      ]);
Ce petit bout de code me permet de me logguer, et de me donner les privilèges nécessaires.
Lorsque j'ai un timeout, je log dans un fichier l'@IP. Mais j'aimerais aussi qu'il passe à l'host suivant, plutôt que d'essayer de passer des commandes et d'avoir des timeout à chacune d'entre elles...
je ne peux pas mettre de exit, sinon la liste d'@IP ne sera pas passée, et next ne passe pas dans un sub...

Auriez-vous une idée svp?

Merci d'avance,