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

Bibliothèques tierces Python Discussion :

Paramiko - gestion des erreurs


Sujet :

Bibliothèques tierces Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 32
    Par défaut Paramiko - gestion des erreurs
    Bonjour à tous,

    J'ai fais un petit script à partir d'infos glanées ça et là ...

    Le but :

    Se connecter sur des serveurs à partir d'une liste d'ip.
    Récupérer des variables et me les afficher.

    Sauf que quand un serveur n'est pas accessible, le script s'arrête et je voudrai, en cas d'erreur quelconque (clé ssh refusée, timeout de connexion, ...) qu'il passe à l'adresse ip suivante.

    Voici ce que j'ai :

    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
     
    #!/usr/bin/python
     
    import paramiko
    import os
     
    privatekeyfile = os.path.expanduser('/home/ll/.ssh/privateopensshkey.ssh')
    mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
    lstadrip = open('/home/ll/Documents/lst_eth0.txt', 'r')
    for i in lstadrip:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(i,username='root',pkey=mykey)
            stdin, stdout, stderr = ssh.exec_command(". /usr/bin/ParseDico; echo $var1")
            info1 = stdout.read().replace('\n', '')
            stdin, stdout, stderr = ssh.exec_command(". /usr/bin/ParseDico; echo $var2")
            info2 = stdout.read().replace('\n', '')
            tdin, stdout, stderr = ssh.exec_command("grep / /etc/squid/src_noauth_user | tail -1")
            info3 = stdout.read().replace('\n', '')
            print info1, info2, info3
            ssh.close()
    lstadrip.close()
    Merci pour votre aide.

    Edit : Je viens de trouver ça :
    http://www.lag.net/paramiko/docs/par...ion-class.html

    Mais je ne vois pas trop comment l'utiliser... Je précise également que je n'y connais strictement rien en python...

  2. #2
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Bonsoir,
    "paramiko"... Ni vu, ni connu.
    Par contre pour ce qui des exceptions, tu dois t'y prendre de la manière suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try:
        operation_dangereuse_1
        operation_dangereuse_2
        ...
        operation_dangereuse_n
    except Excetpion_1:
        print ("Erreur 1")
    except Exception_2:
        print ("Erreur 2")
        ...
    except Exception_n:
        print ("Erreur 2")
    else:
        print ("Erreur Inconnue!")
    Ou Exception_i est une classe devant dériver de "Exception". Donc avec ton code j'obtiens:
    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
    #coding:latin1
    import paramiko
    import os
     
    privatekeyfile = os.path.expanduser('/home/ll/.ssh/privateopensshkey.ssh')
    mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
    lstadrip = open('/home/ll/Documents/lst_eth0.txt', 'r')
    for i in lstadrip:
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(i,username='root',pkey=mykey)
            stdin, stdout, stderr = ssh.exec_command(". /usr/bin/ParseDico; echo $var1")
            info1 = stdout.read().replace('\n', '')
            stdin, stdout, stderr = ssh.exec_command(". /usr/bin/ParseDico; echo $var2")
            info2 = stdout.read().replace('\n', '')
            tdin, stdout, stderr = ssh.exec_command("grep / /etc/squid/src_noauth_user | tail -1")
            info3 = stdout.read().replace('\n', '')
            print info1, info2, info3
            ssh.close()
        except AuthenticationException:
            print("Impossible de s'identifier au près du serveur: <%s>" % i)
        except BadHostKeyException:
            print("Mauvaise clef présentée au serveur: <%s>" %i)
        except ChannelException:
            print("Erreur de channel sur le serveur: <%s>" %i)
        else:
            print("Erreur inconnue")
    lstadrip.close()
    Les différentes exeptions sont celles mentionnées dans le lien.

    @+ et bon code.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

Discussions similaires

  1. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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