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

Réseau/Web Python Discussion :

Lancer une commande interactive avec paramiko


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Lancer une commande interactive avec paramiko
    Bonjour, j'essaie depuis plus d'une semaine de lancer de me connecter en ssh sur 3 serveurs successifs c'est à dire accéder au second aprés m'etre connectée en ssh au premier, puis accéder au 3° apres m'etre connectée en ssh au 2° serveur.
    J'utilise parmiko pour ce faire mais je n'arrive à me connecter qu'au premier.
    Lorsque je lance la commande ssh pour me connecter au second serveur.
    Je reçois un message d'erreur.
    Pourriez-vous éclairer ma lanterne ?
    Voici mon source :
    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
     
    import paramiko, time
    # Connexion au 1° serveur
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('ip1', username='user1', password='pass1')
    stdin, stdout, stderr = ssh.exec_command('pwd')
    print stdout.readlines()
    # Connexion ssh au 2° serveur and wait for the password prompt.
    stdin, stdout, stderr = ssh.exec_command('ssh user2@ip2')
    time.sleep(5)
    stdin.write('pass2')
    # Connexion au 3° serveur
    stdin, stdout, stderr = ssh.exec_command('pwd')
    print stdout.readlines()
    stdin, stdout, stderr = ssh.exec_command('ssh user2@ip2')
    time.sleep(5)
    stdin.write('pass2')
    stdin, stdout, stderr = ssh.exec_command('pwd')
    print stdout.readlines()
    Quand je l'exécute, je reçois ceci comme message d'erreur :

    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
     
    ['/home/opennms\n']
     
    Traceback (most recent call last):
      File "P:\Program Files\Python27\sshtest.py", line 13, in <module>
        stdin.write('siemens')
      File "build\bdist.win32\egg\paramiko\file.py", line 314, in write
        self._write_all(data)
      File "build\bdist.win32\egg\paramiko\file.py", line 439, in _write_all
        count = self._write(data)
      File "build\bdist.win32\egg\paramiko\channel.py", line 1256, in _write
        self.channel.sendall(data)
      File "build\bdist.win32\egg\paramiko\channel.py", line 796, in sendall
        raise socket.error('Socket is closed')
    error: Socket is closed
    Avez-vous une idée de l'endroit où je me suis plantée ?

    Je vous remercie d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    ssh définit un mode opératoire spécifique pour gérer les "rebonds". Ils appellent cela "proxy" et permettent de définir des "ProxyCommand" dans les fichiers de configuration.

    Après, il y a la mise en œuvre de cette fonctionnalité via Paramiko: soit on laisse faire le boulot via des fichiers de configuration ssh, soit on le code: il faut choisir.

    Avant de coder, lire la documentation (ssh, paramiko et les proxy) et la recherche d'exemples de mise en œuvre (Google est votre ami) est un pré-requis.

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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci d'avoir pris le temps de répondre.
    Je vais prendre la première solution proposée en utilisant les fichiers de configuration ssh.
    Mais je ne sais pas comment m'y prendre, pouvez vous me donner plus d'indications s'il vous plait ?

    Merci d'avance.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Ce sont des sujets assez bien documentés et les mots clés donnés devraient vous permettre de chercher vous même sur Google avec "ssh+proxycommand" ou "paramiko+proxycommand".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Maintenant j'arrive à me connecter au 2° serveur mais pas au 3° à cause du prompt. Le code doit detecter la fin de ligne ssh :

    user2@pass2:~>
    avant de lancer la 3° commande ssh.
    Suaf que dans la console, j'ai :

    user2@ndsadm01:~>

    Du coup le code ne détecte pas la fin de ligne que je lui demande de trouver.

    Comment contourner ce problème ??

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Affichage prompt avec chaine de caractere représentant la couleur de la chaine
    Je pense que c'est lié au fait que le prompt du 2° serveur est en couleur verte. Ce qui justifie les crochets, 0m et caractères bizarre.
    Mais du coup dois je les prendre en compte dans mon source ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour wiztricks,

    Merci de votre aide, j'ai résolu le problème.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 05/11/2008, 20h43
  2. Lancer une commande système avec des "
    Par Caro-Line dans le forum Langage
    Réponses: 3
    Dernier message: 03/04/2007, 15h17
  3. lancer une commande unix avec perl
    Par dm_manu dans le forum Langage
    Réponses: 1
    Dernier message: 02/08/2006, 19h41
  4. lancer une commande système avec jbuilder
    Par xs_nady dans le forum JBuilder
    Réponses: 1
    Dernier message: 28/03/2006, 04h54
  5. Lancer une commande système avec VC++
    Par xs_nady dans le forum MFC
    Réponses: 1
    Dernier message: 17/03/2006, 14h03

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