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

Python Discussion :

Echec de connexion ssh avec paramiko


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut Echec de connexion ssh avec paramiko
    Bonjour, j'essaye de pouvoir communiquer avec un serveur grâce au module paramiko. voici les codes correspondants au serveur et au client:
    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
    import socket
    import paramiko
    import threading
    import sys
     
    host_key = paramiko.RSAKey(filename='C:/Users/axel.ch/Desktop/paramiko-master/demos/test_rsa.key')
     
    class Server (paramiko.ServerInterface):
       def _init_(self):
           self.event = threading.Event()
       def check_channel_request(self, kind, chanid):
           if kind == 'session':
               return paramiko.OPEN_SUCCEEDED
           return paramiko.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
       def check_auth_password(self, username, password):
           if (username == 'root') and (password == 'toor'):
               return paramiko.AUTH_SUCCESSFUL
           return paramiko.AUTH_FAILED
     
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind(('192.168.1.114', 22))
        sock.listen(100)
        print '[+] Listening for connection ...'
        client, addr = sock.accept()
    except Exception, e:
        print '[-] Listen/bind/accept failed: ' + str(e)
        sys.exit(1)
    print '[+] Got a connection!'
     
    try:
        t = paramiko.Transport(client)
        try:
            t.load_server_moduli()
        except:
            print '[-] (Failed to load moduli -- gex will be unsupported.)'
            raise
        t.add_server_key(host_key)
        server = Server()
        try:
            t.start_server(server=server)
        except paramiko.SSHException, x:
            print '[-] SSH negotiation failed.'
     
        chan = t.accept(20)
        print '[+] Authenticated!'
        print chan.recv(1024)
        chan.send('Yeah i can see this')
        while True:
           command= raw_input("Enter command: ").strip('\n')
           chan.send(command)
           print chan.recv(1024) + '\n'
     
    except Exception, e:
        print '[-] Caught exception: ' + str(e) + ': ' + str(e)
        try:
            t.close()
        except:
            pass
        sys.exit(1)
    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
    import paramiko
    import threading
    import subprocess
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect('192.168.1.114', username='root', password='toor')
    chan = client.get_transport().open_session()
    chan.send('Hey i am connected :) ')
    print chan.recv(1024)
     
    def sftp(local_path,name):
        try:
            transport = paramiko.Transport(('192.168.1.114', 22))
            transport.connect(username = 'root', password = 'toor')
            sftp = paramiko.SFTPClient.from_transport(transport)
            sftp.put(local_path, 'C:/Users/axel.ch/Desktop'+name)
            sftp.close()
            transport.close()
            return '[+] Done'
        except Exception,e:
            return str(e)
     
     
    while True:
     
        command = chan.recv(1024)
        if 'grab' in command:
            grab,name,path = command.split('*')
            chan.send( sftp(path,name) )
     
    client.close
    Le problème arrive lorsque je souhaite transférer un fichier, (Tous mes tests sont en local) j'obtiens ce message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [+] Listening for connection ...
    [+] Got a connection!
    [+] Authenticated!
    Hey i am connected :) 
    Enter command: grab*nb*C:/Users/axel.ch/Downloads/nb.txt
    Error reading SSH protocol banner
    J'ai recherché sur internet, et j'ai vu à certains endroits que le problème venait d'une mauvaise bannière SSH ne commencant pas par 'SSH-'. Cependant je ne sais pas comment la modifier.
    Merci de votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par stinng Voir le message
    Le problème arrive lorsque je souhaite transférer un fichier, (Tous mes tests sont en local) j'obtiens ce message d'erreur
    Dans une histoire de protocoles, il y a le client (votre script Python) et le serveur.
    Si le serveur retourne une bannière mal formatée ou n'accepte plus de connexions, c'est pas en regardant le code Python que vous allez avancer. Il faut regarder (mettre en place) les logs côté serveur pour voir ce qu'il en pense.
    Ce n'est qu'avec une idée de ce qu'il se passe des deux côtés que vous aller pouvoir avancer. (et éventuellement aller poser une question dans le forum approprié).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    Voici le log lors de l’exécution du serveur:
    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
    DEBUG:paramiko.transport:starting thread (server mode): 0x38508f0L
    DEBUG:paramiko.transport:Local version/idstring: SSH-2.0-paramiko_2.0.2
    DEBUG:paramiko.transport:Remote version/idstring: SSH-2.0-paramiko_2.0.2
    INFO:paramiko.transport:Connected (version 2.0, client paramiko_2.0.2)
    DEBUG:paramiko.transport:kex algos:[u'diffie-hellman-group1-sha1', u'diffie-hellman-group14-sha1', u'diffie-hellman-group-exchange-sha1', u'diffie-hellman-group-exchange-sha256'] server key:[u'ssh-rsa', u'ssh-dss', u'ecdsa-sha2-nistp256', u'ecdsa-sha2-nistp384', u'ecdsa-sha2-nistp521'] client encrypt:[u'aes128-ctr', u'aes192-ctr', u'aes256-ctr', u'aes128-cbc', u'blowfish-cbc', u'aes192-cbc', u'aes256-cbc', u'3des-cbc', u'arcfour128', u'arcfour256'] server encrypt:[u'aes128-ctr', u'aes192-ctr', u'aes256-ctr', u'aes128-cbc', u'blowfish-cbc', u'aes192-cbc', u'aes256-cbc', u'3des-cbc', u'arcfour128', u'arcfour256'] client mac:[u'hmac-sha2-256', u'hmac-sha2-512', u'hmac-md5', u'hmac-sha1-96', u'hmac-md5-96', u'hmac-sha1'] server mac:[u'hmac-sha2-256', u'hmac-sha2-512', u'hmac-md5', u'hmac-sha1-96', u'hmac-md5-96', u'hmac-sha1'] client compress:[u'none'] server compress:[u'none'] client lang:[u''] server lang:[u''] kex follows?False
    DEBUG:paramiko.transport:Kex agreed: diffie-hellman-group1-sha1
    DEBUG:paramiko.transport:Cipher agreed: aes128-ctr
    DEBUG:paramiko.transport:MAC agreed: hmac-sha2-256
    DEBUG:paramiko.transport:Compression agreed: none
    DEBUG:paramiko.transport:kex engine KexGroup1 specified hash_algo <built-in function openssl_sha1>
    DEBUG:paramiko.transport:Switch to new keys ...
    DEBUG:paramiko.transport:Auth request (type=password) service=ssh-connection, username=root
    INFO:paramiko.transport:Auth granted (password).
    DEBUG:paramiko.transport:[chan 0] Max packet in: 32768 bytes
    DEBUG:paramiko.transport:[chan 0] Max packet out: 32768 bytes
    DEBUG:paramiko.transport:Secsh channel 0 (session) opened.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Si vous voulez coder client et serveur, il va falloir apprendre à déboguer... ou attendre qu'une âme charitable veuille bien passer du temps là dessus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    Alors je vais apprendre à déboguer, un bon tutoriel à proposer?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par stinng Voir le message
    Alors je vais apprendre à débuguer, un bon tutoriel à proposer?
    Un peu de recherche sur Internet peut être?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    Pour info, voilà le log du client:
    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
    2016-08-30 19:07:55,487 -- root -- DEBUG -- Debug error
    2016-08-30 19:07:55,487 -- root -- INFO -- INFO ERROR
    2016-08-30 19:07:55,487 -- root -- WARNING -- Warning Error 01234: Erreur Oracle
    2016-08-30 19:07:55,487 -- root -- ERROR -- error message
    2016-08-30 19:07:55,487 -- root -- CRITICAL -- critical error
    2016-08-30 19:07:55,487 -- paramiko.transport -- DEBUG -- starting thread (client mode): 0x374ea10L
    2016-08-30 19:07:55,487 -- paramiko.transport -- DEBUG -- Local version/idstring: SSH-2.0-paramiko_2.0.2
    2016-08-30 19:07:55,487 -- paramiko.transport -- DEBUG -- Remote version/idstring: SSH-2.0-paramiko_2.0.2
    2016-08-30 19:07:55,525 -- paramiko.transport -- INFO -- Connected (version 2.0, client paramiko_2.0.2)
    2016-08-30 19:07:55,525 -- paramiko.transport -- DEBUG -- kex algos:[u'diffie-hellman-group1-sha1', u'diffie-hellman-group14-sha1'] server key:[u'ssh-rsa'] client encrypt:[u'aes128-ctr', u'aes192-ctr', u'aes256-ctr', u'aes128-cbc', u'blowfish-cbc', u'aes192-cbc', u'aes256-cbc', u'3des-cbc', u'arcfour128', u'arcfour256'] server encrypt:[u'aes128-ctr', u'aes192-ctr', u'aes256-ctr', u'aes128-cbc', u'blowfish-cbc', u'aes192-cbc', u'aes256-cbc', u'3des-cbc', u'arcfour128', u'arcfour256'] client mac:[u'hmac-sha2-256', u'hmac-sha2-512', u'hmac-md5', u'hmac-sha1-96', u'hmac-md5-96', u'hmac-sha1'] server mac:[u'hmac-sha2-256', u'hmac-sha2-512', u'hmac-md5', u'hmac-sha1-96', u'hmac-md5-96', u'hmac-sha1'] client compress:[u'none'] server compress:[u'none'] client lang:[u''] server lang:[u''] kex follows?False
    2016-08-30 19:07:55,525 -- paramiko.transport -- DEBUG -- Kex agreed: diffie-hellman-group1-sha1
    2016-08-30 19:07:55,525 -- paramiko.transport -- DEBUG -- Cipher agreed: aes128-ctr
    2016-08-30 19:07:55,525 -- paramiko.transport -- DEBUG -- MAC agreed: hmac-sha2-256
    2016-08-30 19:07:55,525 -- paramiko.transport -- DEBUG -- Compression agreed: none
    2016-08-30 19:07:55,625 -- paramiko.transport -- DEBUG -- kex engine KexGroup1 specified hash_algo <built-in function openssl_sha1>
    2016-08-30 19:07:55,625 -- paramiko.transport -- DEBUG -- Switch to new keys ...
    2016-08-30 19:07:55,641 -- paramiko.transport -- DEBUG -- Adding ssh-rsa host key for 192.168.1.114: 60733844cb5186657fdedaa22b5a57d5
    2016-08-30 19:07:55,641 -- paramiko.transport -- DEBUG -- userauth is OK
    2016-08-30 19:07:55,641 -- paramiko.transport -- INFO -- Authentication (password) successful!
    2016-08-30 19:07:55,657 -- paramiko.transport -- DEBUG -- [chan 0] Max packet in: 32768 bytes
    2016-08-30 19:07:55,657 -- paramiko.transport -- DEBUG -- [chan 0] Max packet out: 32768 bytes
    2016-08-30 19:07:55,657 -- paramiko.transport -- DEBUG -- Secsh channel 0 opened.
    2016-08-30 19:08:09,250 -- paramiko.transport -- DEBUG -- starting thread (client mode): 0x38cf510L
    2016-08-30 19:08:09,250 -- paramiko.transport -- DEBUG -- Local version/idstring: SSH-2.0-paramiko_2.0.2
    2016-08-30 19:08:24,348 -- paramiko.transport -- ERROR -- Exception: Error reading SSH protocol banner
    2016-08-30 19:08:24,352 -- paramiko.transport -- ERROR -- Traceback (most recent call last):
    2016-08-30 19:08:24,354 -- paramiko.transport -- ERROR --   File "C:\Python27\lib\site-packages\paramiko\transport.py", line 1740, in run
    2016-08-30 19:08:24,354 -- paramiko.transport -- ERROR --     self._check_banner()
    2016-08-30 19:08:24,354 -- paramiko.transport -- ERROR --   File "C:\Python27\lib\site-packages\paramiko\transport.py", line 1888, in _check_banner
    2016-08-30 19:08:24,355 -- paramiko.transport -- ERROR --     raise SSHException('Error reading SSH protocol banner' + str(e))
    2016-08-30 19:08:24,355 -- paramiko.transport -- ERROR -- SSHException: Error reading SSH protocol banner
    2016-08-30 19:08:24,355 -- paramiko.transport -- ERROR -- 
    2016-08-30 19:08:27,134 -- paramiko.transport -- ERROR -- Socket exception: Une connexion existante a dû être fermée par l’hôte distant (10054)
    2016-08-30 19:09:14,740 -- root -- DEBUG -- Debug error
    2016-08-30 19:09:14,740 -- root -- INFO -- INFO ERROR
    2016-08-30 19:09:14,740 -- root -- WARNING -- Warning Error 01234: Erreur Oracle
    2016-08-30 19:09:14,740 -- root -- ERROR -- error message
    2016-08-30 19:09:14,740 -- root -- CRITICAL -- critical error
    Plus qu'à apprendre à débogger et à le faire

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    J'ai un peu avancé et je sais maintenant à peu près d'où vient l'erreur. Voici la partie du code la contenant:
    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
    def _check_banner(self):
            # this is slow, but we only have to do it once
            for i in range(100):
                # give them 15 seconds for the first line, then just 2 seconds
                # each additional line.  (some sites have very high latency.)
                if i == 0:
                    timeout = self.banner_timeout
                else:
                    timeout = 2
                try:
                    buf = self.packetizer.readline(timeout)
                except ProxyCommandFailure:
                   raise
                except Exception as e:
                    raise SSHException('Error reading SSH protocol banner' + str(e))
                if buf[:4] == 'SSH-':
                    break
                self._log(DEBUG, 'Banner: ' + buf)
    (la valeur de self.banner_timeout est 15)
    Cependant je ne comprend pas pourquoi il y a erreur étant donné que buf réussit à prendre la valeur de self.packetizer.readline(timeout). sa valeur est 'SSH-2.0-paramiko_2.0.2'. Voyez-vous une autre erreur?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par stinng Voir le message
    Cependant je ne comprend pas pourquoi il y a erreur étant donné que buf réussit à prendre la valeur de self.packetizer.readline(timeout). sa valeur est 'SSH-2.0-paramiko_2.0.2'. Voyez-vous une autre erreur?
    Comment avez vous vérifié que buf a pris la valeur que vous pensez?
    (et que le code n'a pas de bonne raison de partir en "timeout").

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    J'ai utilisé le module pdb et j'ai fait un print juste avant l'erreur

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par stinng Voir le message
    J'ai utilisé le module pdb et j'ai fait un print juste avant l'erreur
    alors peut-être que .readline n'a pas reçu "fin de ligne"?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    Comment puis-je vérifier?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    Voici la partie du code définissant readline, l'erreur devrait logiquement être dans cette partie du code, mais je dois bien vous avouer que là, je ne comprend pas tout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        def readline(self, timeout):
            """
            Read a line from the socket.  We assume no data is pending after the
            line, so it's okay to attempt large reads.
            """
            buf = self.__remainder
            while not linefeed_byte in buf:
                buf += self._read_timeout(timeout)
            n = buf.index(linefeed_byte)
            self.__remainder = buf[n + 1:]
            buf = buf[:n]
            if (len(buf) > 0) and (buf[-1] == cr_byte_value):
                buf = buf[:-1]
            return u(buf)
    De plus, j'ai recherché la valeur de linefeed_byte et linefeed_byte = byte_chr(10) soit '\n' et voici le code de _read_timeout
    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
    def _read_timeout(self, timeout):
            start = time.time()
            while True:
                try:
                    x = self.__socket.recv(128)
                    if len(x) == 0:
                        raise EOFError()
                    break
                except socket.timeout:
                    pass
                except EnvironmentError as e:
                    if (type(e.args) is tuple and len(e.args) > 0 and
                            e.args[0] == errno.EINTR):
                        pass
                    else:
                        raise
                if self.__closed:
                    raise EOFError()
                now = time.time()
                if now - start >= timeout:
                    raise socket.timeout()
            return x

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    J'ai un doute sur la position de l'erreur, car lorsque je met un print buf dans la définition de la fonction readline(), celui ci affiche 'SSH-2.0-paramiko_2.0.2' à l'execution du programme client mais ne l'affiche pas au moment (ou juste avant) où l'erreur Exception: Error reading SSH protocol banner est afficher. Donc je ne pense pas que l'erreur provienne de readline().

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par stinng Voir le message
    J'ai un doute sur la position de l'erreur, car lorsque je met un print buf dans la définition de la fonction readline(), celui ci affiche 'SSH-2.0-paramiko_2.0.2' à l'execution du programme client mais ne l'affiche pas au moment (ou juste avant) où l'erreur Exception: Error reading SSH protocol banner est afficher. Donc je ne pense pas que l'erreur provienne de readline().
    On peut penser que l'erreur est du a un timeout.
    Après vous pouvez toujours modifier .readline pour savoir s'il a reçu quelques caractères ou rien du tout.
    • "rien du tout", c'est peut être parce que le serveur n'a rien expédié,
    • "quelques", il y en a qui se sont perdus en route


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Points : 18
    Points
    18
    Par défaut
    J'ai continué de rechercher le problème. Grâce au module pdb, j'ai su qu'il était dans readline() (le code est dans les messages précédents), dans la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while not linefeed_byte in buf:
                buf += self._read_timeout(timeout)
    Je me suis donc intéréssé à la fonction _read_timeout(timeout) (le code est également dans les messages précédents) et l'erreur semble provenir de cette partie du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = self.__socket.recv(128)
    Qui renvoie à Finalement j'avais tord dans les messages précédents, en fait l'erreur provient bien de readline() ou bien plus encore en profondeur.

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par stinng Voir le message
    Finalement j'avais tord dans les messages précédents, en fait l'erreur provient bien de readline() ou bien plus encore en profondeur.
    .readline ne retournera de ligne que si le serveur de l'autre côté a expédié quelque chose.
    Maintenant que vous savez qu'il n'y a pas grand chose à regarder côté client, il faut regarder côté serveur ou les messages échangés entre client et serveur (avec un outil comme wireshark).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Python 2.X] python matplotlib erreur
    Par hichem0550 dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 29/05/2016, 16h33
  2. Réponses: 5
    Dernier message: 29/08/2014, 10h38
  3. [Erreur][SSH] fcntl(1000, F_SETFL, O_NONBLOCK)
    Par kaymak dans le forum Réseau
    Réponses: 2
    Dernier message: 20/12/2008, 16h29
  4. Gestion des erreurs ssh dans ant
    Par mystar dans le forum ANT
    Réponses: 3
    Dernier message: 19/01/2007, 19h00
  5. Python + Pmw erreur Pmw.initialise(root)
    Par zezitinho dans le forum Tkinter
    Réponses: 5
    Dernier message: 07/04/2006, 13h27

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