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 :

Connection SSH via perl


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Connection SSH via perl
    Bonjour,

    Je cherche actuellement à faire un programme Perl qui me permet de récupérer des informations sur un firewall, de les traiter et de les stocker dans une base MySQL. Pour récupérer ces informations, j'utilise une connexion SSH, j'ai donc installé le module Perl Net::SSH:: Perl et ses dépendances pas sans difficulté ! J'ai fait des tests sur un serveur en utilisant le code suivant

    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
    #!/usr/bin/perl -w
    use strict;
    use Net::SSH::Perl;
    print "==> Connexion SSH en cours ...\n";
    my $host = "192.168.2.93";
    my $username = "serveur";
    my $password = "password";
     
    my $ssh = Net::SSH::Perl->new($host);
    print "==> Connexion effectuée, Identification en cours ...\n";
    $ssh->login($username, $password)
     
    my($stdout, $stderr, $exit) = $ssh->cmd('ifconfig');
     
    print $stdout;
    exit;
    Pas de problème cela marche très bien sur le serveur test, maintenant je veux le tester sur le firewall et la, surprise, sa ne marche pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ==> Connexion effectuée, Identification en cours ...
    Permission denied at p3 line 11
    J'aimerais savoir comment, en utilisant le module SSH de Perl, je peut me connecter en SSH avec un cryptage DSA et une demande de passphrase?

    avez-vous des exemples de code des explications claire de la doc Net::SSH:: Perl de CPAN?

    PS : Je ne peut pas changer la configuration du firewall, donc impossible de modifier la connexion SSH pour me connecter sans la passphrase

    Merci d'avance !

  2. #2
    Membre confirmé Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Points : 515
    Points
    515
    Par défaut
    Bonjour,

    Trouvé dans la doc CPAN :
    The password $password is needed only for password authentication (it's not used for passphrases on encrypted RSA/DSA identity files, though perhaps it should be). And if you're running in an interactive session and you've not provided a password, you'll be prompted for one.
    Mais regarde plutôt du côté du module Net::SSH:: Perl::Util (http://search.cpan.org/~turnstep/Net...H/Perl/Util.pm) il y a des fonctions qui gère les passphrase set les clés si tu veux (_load_public_key et _read_passphrase)

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    "Permission denied", ça ressemble plutôt à une impossibilité d'exécuter ifconfig sur le firewall à cause d'un problème de droits.
    Si tu te logges "à la main" est-ce que ça fonctionne déjà?

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Merci de vos réponse,

    Alors si je me log à la main je peut exécuter la commande "ifconfig" , le "Permission denied at p3 line 11" m'indique bien que c'est à la ligne 11 donc au moment de l'identification.
    Pour une connexion SSH classique, ce programme fonctionne bien, mais pour le firewall c'est une connexion SSH avec un cryptage DSA et une passphrase. Il me faut un programme qui puisse gérer le DSA et en même temps pouvoir entrer la passphrase

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    OK, c'est donc bien l'authentification qui est rejetée par le serveur.
    Le problème est que le module Net::SSH::Perl n'a pas l'air d'offrir les fonctionnalités dont tu as besoin, et pour Net::SSH::Perl::Utils, un coup d'oeil rapide à la doc n'incite pas à l'optimisme. En effet la fonction de lecture de passphrase lit au clavier, ce n'est pas fait pour un traitement automatique.
    Il faut voir que quand on se connecte par ssh dans un script en mode batch, en principe on utilise des clefs sans passphrase. Car la passphrase a pour but d'être tapée au clavier par un être humain, sinon elle ne sert à rien.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    Pour ce problème, il y a une astuce qui consiste, avant exécution de ton script à charger la clé dans ton ssh-agent (ssh-add .ssh/id_dsa_pourmonfirewall). Puis, éxécution du script. Net::SSH:erl utilise le ssh-agent.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Merci Thierry !

    J'ai utilisé ta méthode.
    Je vais expliquer comment j'ai fait, sa peut toujours servir à quelqu'un !

    J'ai donc généré ma clé dsa avec la passphasse que je voulais :
    ssh-keygen -t dsa

    j'ai ensuite copier la clé public sur le firewall/serveur :
    scp ~/.ssh/id_dsa.pub machine.serveur:~/

    on ajoute/ou créé la clé au fichier authorized_keys :
    cat id_dsa.pub >> ~/.ssh/authorized_keys

    on supprime la clé id_dsa.pub :
    rm ~/id_dsa.pub

    on va ensuite utiliser SSH-Agent, je l'active et j'ajoute la clé privé au ssh-agent.La passphrasse est demander si on n'a entrer une passphrase :

    eval `ssh-agent`
    ssh-add .ssh/id_dsa
    Enter passphrase for .ssh/id_dsa: <pass><return>
    Identity added: .ssh/id_dsa (.ssh/id_dsa)

    et voila plus besoin d'entrer de passphrasse

    voila le code que j'utilise ensuite :
    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
    #!/usr/bin/perl
    use Net::SSH::Perl;
    use Net::SSH::Perl::Key::DSA;
    use Class::ErrorHandler;
    #***************************************************************************************************************#
    #					Connection SSH								#
    #***************************************************************************************************************#
    system("clear");
     
    my $server="192.168.2.1";
    my $port="22";
    my $username="admin";
    my $command="ls";
     
    print "==> Connexion en cours ...\n";
    my $ssh = Net::SSH::Perl->new("$server", port=>"$port",protocole => 2,debug=>'0');
    $ssh->login($username);
    print "Connexion effectuée ! :)\n\n";
    my($stdout, $stderr, $exit) = $ssh->cmd("$command");
    On peut placer un identity_files=>["/lecheminde/monrepertoire/.ssh/id_rsa.pub"] dans les paramètres si on n'a placer le fichier dans un autre répertoire.

    Sinon on peut utiliser le module Net::OpenSSH

    Au fait bravo pour les cours et tutoriels pour apprendre la programmation Perl : http://perl.developpez.com/cours/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Se connecter à un serveur SSH via le finder
    Par Khleo dans le forum Mac OS X
    Réponses: 3
    Dernier message: 26/07/2013, 16h17
  2. Erreur 1045 impossible de se connecter à mysql via un script
    Par julian-brokendolls dans le forum Installation
    Réponses: 7
    Dernier message: 05/01/2006, 04h23
  3. [JDBC]connection à db2 via websphere
    Par mlequim dans le forum JDBC
    Réponses: 23
    Dernier message: 06/07/2005, 15h22
  4. Connection SSH
    Par Fry dans le forum Développement
    Réponses: 5
    Dernier message: 17/02/2005, 18h04
  5. Réponses: 2
    Dernier message: 30/05/2002, 08h54

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