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

Modules Perl Discussion :

Connexion SSH et commande en perl


Sujet :

Modules Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut Connexion SSH et commande en perl
    Bonjour,
    je suis sous windows XP Pro
    je voulais savoir si avec perl je pouvais lancer des scripts en shell unix sur un serveur distant.
    Je veux savoir si c'est possible et si c'est le cas je me ferai un plaisir de rechercher moi-même.

  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 : 498 771
    Points
    498 771
    Par défaut
    Si ces scripts sont déjà sur ces serveurs, je te dirais donc que c'est possible.
    Tu te connectes en ssh sur ces serveurs et lance les scripts.

    Voilou

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Oui les scripts sont déjà sur le serveur, je ne cherche qu'à les lancer.
    Je vais rechercher ça et le dirai si je trouve comment faire.
    Merci

  4. #4
    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 : 498 771
    Points
    498 771
    Par défaut
    Tu peux utiliser le module Net::SSH::Perl pour te connecter en ssh sur les serveurs.
    Ensuite tu lances tes commandes.

    voilou

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Oui c'est ce que j'avais essayé de faire mais apparemment j'ai des problèmes car la fonction getpwuid n'a pas été implémentée
    http://www.zotline.com/shownote.zot/NoteNum/3386.html
    c'est bien ce qui me bloque.

  6. #6
    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 : 498 771
    Points
    498 771
    Par défaut
    je ne comprends pas ton probleme.
    Le lien que tu donnes parles de perl 5.0 (tres tres vieux perl, plus d'actualités).
    une fois connecté en ssh, je ne vois pas ce que t'arrive pas à faire!!

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    non le truc c'est que je ne peux pas me connecter en ssh car ce message d'erreur m'est retourné
    "The getpwuid function is unimplemented at C:/Perl/site/lib/Net/SSH/Perl.pm line 110" lorsque je lance mon script dans l'invité de commande
    j'avais installé activeperl 5.8.8

  8. #8
    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 : 498 771
    Points
    498 771
    Par défaut
    Ok, moi je l'utilise sous linux.
    Je me demande s'il te faut pas installer cygwin, puis ssh pour pouvoir le tester

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    merci, je vais y réfléchir.

  10. #10
    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 : 498 771
    Points
    498 771
    Par défaut
    au final, je sais pas.
    Je viens de tester sur un PC windows sur lequel ssh est installé via cygwin mais ça ne fonctionne pas
    Regarde aussi Net::ssh2

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    C'est bon, j'ai pu me connecter en SSH sous windows sur un serveur linux.
    Quand j'aurai terminé ce que j'ai à faire, j'expliquerai comment.

  12. #12
    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 : 498 771
    Points
    498 771
    Par défaut
    Ok, peut tu me mettre ton bout de code de test?
    Quel module as tu utiliser?

    sinon de windows à linux, j'y arrive aussi via net::ssh2, mais c pour qu'on puis comparer nos codes et le donner aux autres forumeurs

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    j'ai installé les modules
    Math-BigInt
    Math-BigInt-GMP
    Math-Pari

    en plus de Net::SSH et de Net::SSH::W32Perl

    et j'ai supprimé "|| (getpwuid($>))[7]" à la ligne 110 dans le fichier c:/Perl/site/lib/net/SSH/Perl.pm

    pour le code, c'est la syntaxe standard de création de l'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $host = "XXXX";
    my $user = "YYYY";
    my $psswd = "ZZZZ";
     
    my $ssh = Net::SSH::W32Perl->new( $host );
    $ssh->login( $user , $psswd );
    EDIT: bon j'ai testé, c'est bon, je peux créer des répertoires, supprimer des fichiers,etc
    mais j'arrive pas à lancer un script XD

  14. #14
    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 : 498 771
    Points
    498 771
    Par défaut
    Ok, en gros, c'est du bourrin ton truc.
    Il y a une façon plus propre de faire tout ça, je me mettrais dessus demain.
    Car y a pas besoin de supprimer le code

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Purée ya un truc que je comprends pas.
    Il me faut un package particulier ou une commande particulière pour pouvoir faire du "->cmd('/X/Y/Z.sh');" ????? c'est juste un shell à lancer mais ça fonctionne pas !!!

  16. #16
    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 : 498 771
    Points
    498 771
    Par défaut
    Bon, moi je te conseil de ne pas utiliser ce module :mrgreen:,
    mais d'utiliser Net::SSH2.
    1- Ce n'est pas bon de modifier le module comme tu l'as fait
    2- C'est ensuite le bordel. et il date de 2002
    3- Net::SSH::Perl fonctionne mieux sous linux
    4- J'ai testé tous ces modules et au final j'arrive à faire ce que je veux sous windows (vers linux) avec Net::SSH2 et sous linux j'utilise Net::SSH::Perl

    Donc Désinstalle le et install Net::SSH2. Garde ton code de Net::SSH::W32Perl de coté (on sait jamais) et je t'aiderais sur le ssh2, ok?

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    OK je vais faire un autre script en suivant tes instructions.
    Je dirai si j'ai un problème. Merci

  18. #18
    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 : 498 771
    Points
    498 771
    Par défaut
    Je me suis pris la tête sur ce module, donc pour t'éviter de perdre du temps, je vais te donner une procédure que j'ai écrite qui fonctionne bien (car la doc du module à l'air simple mais le module a l'air capricieux).ça te convient ?

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Principe de parcimonie (moindre effort) oblige, je serai vraiment bête de refuser une telle proposition

    merci

  20. #20
    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 : 498 771
    Points
    498 771
    Par défaut
    Bon, je suis de bonne humeur, alors profite en .
    La procédure que j'ai crée permet de faire un ssh de windows sur un serveur (linux car c'est le test que moi j'ai effectué), ça se trouve, il fonctionnera bien de windows à windows, pas testé.

    On lui donne en argument la référence d'un hash dans lequel on lui donne le nécessaire pour se connecter.
    Dans ce hash, on peut lui mettre l'ensemble des commandes qu'on souhaite exécuter sur le serveur dans un tableau anonyme.

    Et on le lance. Pour récupérer la sortie standard, faudra mettre verbose à 1 dans le hash, sinon il exécute les commandes mais ne récupère pas la sortie standard (le STDOUT).

    Le seul hic, et tu pourras peut être chercher pour moi, c'est qu'en cas de mauvaises connexion ou mauvais login, host, etc, le module ne me prévient pas et ne fait rien (ce qui est dommage), j'attends donc ta solution (faut quand même bosser un peu )

    Voilà le code exemple :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
     
    my ($host, $login, $password) = ("SERVEUR", "root", "PASSWD");
     
    my %InfoSSH = (
      host     => $host,
      login    => $login,
      password => $password,
      cmd      => ["cat /etc/passwd", 
                   "pwd", 
                   "ls -alh", 
                  # "/var/www/test/test.sh",
                   "mkdir -p toto",
                   ],
      verbose  => 1,  # To get the stdout
    );
    print CommandSSH( \%InfoSSH );
     
     
     
    #==================================================================
    # But  : Connection SSH + commandes
    # Args : 
    # Retourne : rien ou le stdout
    # Besoin   : modules Net::SSH2 sous win
    #           Net::SSH::Perl sous linux
    #=================================================================
    sub CommandSSH {
      my ( $RefDataConnection ) = @_;
     
      # parameters
      my ($host, $login, $password, $Refcmd, $verbose) = ( 
        $RefDataConnection->{host},
        $RefDataConnection->{login},
        $RefDataConnection->{password},
        $RefDataConnection->{cmd},
        $RefDataConnection->{verbose},
      );
     
      my $OS = $^O;
      my $STDOUT;
     
      # Linux
      if ( $OS eq "linux" ) {
        # A faire
      }
      # Windows
      elsif ( $OS =~ /^mswin32$/i ) {
        require Net::SSH2;
     
        my $ssh2 = Net::SSH2->new();
        $ssh2->connect($host) or die "Unable to connect to $host, $! $@ \n";
        $ssh2->auth_password($login, $password) or die "Unable to login $! \n";
     
        foreach my $cmd ( @{$Refcmd} ) { 
          my $channel = $ssh2->channel();
          $channel->blocking(1);
          $channel->exec($cmd);
          while( $channel->read(my $buffer, 1024) ) {
            if ( defined $verbose and $verbose == 1 ) {
              $STDOUT .= $buffer;
            }
          }
          $channel->close;
        }
      }
     
      if (defined $verbose) {
        return $STDOUT;
      }
     
      return;
    }
    Pour les détails, voir les cours et tutoriels de formation pour apprendre la programmation Perl : http://perl.developpez.com/cours/

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [BATCH] lancer des commandes après une connexion ssh et smbclient
    Par floctc dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 16/06/2015, 18h05
  2. Connexion SSH en Perl: No kex algorithm
    Par seb68270 dans le forum Linux
    Réponses: 1
    Dernier message: 27/05/2015, 11h07
  3. Connexion SSH et récupération de résultats de commandes
    Par ciols dans le forum Programmation et administration système
    Réponses: 20
    Dernier message: 02/12/2014, 19h29
  4. raccourci ligne de commande pour connexion ssh ?
    Par byloute dans le forum Windows 7
    Réponses: 1
    Dernier message: 06/03/2011, 21h59
  5. Connexion ssh impossible
    Par le mage tophinus dans le forum Réseau
    Réponses: 6
    Dernier message: 12/07/2007, 13h37

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