IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

script ssh et expect sans aucun module


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut script ssh et expect sans aucun module
    Bonjour,

    je vous écris car j'essaye sur une VM Linux Perl 5.14 de faire un script pour me connecter des équipements réseaux et y passer des commandes.

    " loi de Murphy" oblique, cette VM est sur le réseau d'un client, donc pas possible d'installer des modules. Il faut faire avec ce qu'il y a, un ssh + expect du pauvre.

    Une connexion réussi ressemble à ci-dessous ou il redemande login et mot de passe

    XXX@ZZZ$ ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 -l admin 10.150.227.1

    User Access Verification

    Username: admin
    Password:
    This equipment is private - Keep Off!

    smwifi01.chambe.XXX.fr*>
    Dans mon script j'essaye de récupérer les valeurs retourner pour voir par exemple si j'ai bien Username: qui apparaît pour envoyer automatiquement mon login préalablement mis dans une variable.

    Le problème c'est que je reste bloqué au moment de mettre le login une fois connecté, il ne semble pas passer la valeur

    perl script.pl

    Login: admin
    Password: TOTO
    Fichier IP:source.txt
    Fichier ligne de commandes:CLI.txt

    User Access Verification
    Voici le script qui est encore à l'état brouillon car pas finis. Ca peut piquer un peu les yeux

    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
    use strict;
    use warnings;
    use Data::Dumper;
    use feature 'say';
    no warnings 'uninitialized';
     
    my @fail;
    my @CLI;
    my $pass;
    my $mire;
    my @ip;
    my $ssh_cli = 'ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 -l';
     
    print 'Login: ';
    chomp (my $login = <>);
    print 'Password: ';
    chomp (my $password = <>);
    print 'Fichier IP: ';
    chomp (my $SOURCE = <>);
    print 'Fichier ligne de commandes:';
    chomp (my $commande = <>);
     
    open (my $source, "<", $SOURCE) or die "Can't open: $!";
    while (my $line = <$source>) {
        $line =~ s/[\r\n]+//;
        push @ip, $line;
        }
     
     
    open (my $cli, "<", $commande) or die "Can't open: $!";
    while (my $line = <$cli>) {
        $line =~ s/[\r\n]+//;
        push @CLI, $line;
        }
     
    foreach my $ip (@ip) {
    	my $SSH = system "$ssh_cli $login $ip";
     
    if ($SSH =~ /username/i) {
            my $pass = system "$login";
            } else {
            say "Connexion SSH $ip echec";
            push @fail, $ip;
            say '-' x 20;
            next;
            }
     
        if ($SSH =~ /password/i) {
            my $mire = system "$password";
            } else {
            say "Connexion SSH $ip echec";
            push @fail, $ip;
            say '-' x 20;
            next
            }
     
        if ($SSH =~ /[>]$/) {   
        foreach (@CLI) {
            say "$_";
            my $resultat = system "$_";
            print  "$resultat";
                }   
            } else {
            say "Commande show version KO";
            push @fail, $ip;
            next;
            }
        }   
     
     
    say;   
    say '### Connexion SSH KO ###';   
    foreach (@fail) {
        say "$_";
        }

    Je pense que le match fonctionne mais que ca doit bloquer à invoquer sur l'équipement distant la commande à rentrer.
    C'est ce bout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $pass = system "$login";
    qui doit bloquer
    J'ai essayer avec print "$login\r" sans succès non plus.

    Une piste? Une intuition? Je prend tout

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Bonsoir Djibril,

    La c'est avec le module Net::SSH::Expect

    Justement la je dois faire sans module.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    J'ai testé en utilisant un utilisant un filehandle pour tester mais je n'arrive toujours pas à passer un argument à distance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $PASS = 'TOTO';
    my $SSH = 'ssh -t -t -o StrictHostKeyChecking=no -o ConnectTimeout=3 -l TATA ';
    my $IP = 'X.X.X.X';
    open my $SESSION, '|-', "$SSH $IP" or die "cannot pipe to SSH: $!";
    print $SESSION "$PASS";
    print $SESSION 'ls -l';

    Résultat
    $ perl TOTO.pl
    TATA@X.X.X.X's password:

Discussions similaires

  1. [Net::SSH::Expect] Utilisation du module
    Par JLChelin dans le forum Modules
    Réponses: 2
    Dernier message: 21/03/2013, 11h05
  2. Réponses: 6
    Dernier message: 01/02/2006, 15h59
  3. [HTML / CSS ... ?] Tableau sans AUCUNE marge
    Par PierrotY dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 19/04/2005, 11h13
  4. Gcc-3.3 error ; Aucun module de lancé
    Par -PiKo- dans le forum Debian
    Réponses: 3
    Dernier message: 20/07/2004, 18h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo