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 :

Utilisation de paramiko pour envoyer des commandes ssh


Sujet :

Bibliothèques tierces Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut Utilisation de paramiko pour envoyer des commandes ssh
    Bonjour,

    Je souhaite faire un programme simple depuis windows pour envoyer des commandes sur une debian en ssh. Malheureusement je n'ai pas trouver comment faire dans le help(paramiko) ...

    Je suis sous windows 8.1 j ai installé :

    Python
    https://www.python.org/ftp/python/2....thon-2.6.6.msi
    Paramiko
    http://arquivos.victorjabur.com/pyth...in32-py2.7.exe
    PyCrypto
    http://www.voidspace.org.uk/download...in32-py2.6.exe


    J'utilise ceci pour la connexion et ça ne génère pas d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import paramiko
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect('192.168.1.16', username='root', password='azerty')
    client.close()
    Je souhaiterai savoir comment transmettre une commande telle que :
    /usr/sbin/asterisk -rx "database show" ou ls -l

    Est il également possible de récupérer dans un fichier ou une variable le résultat de ls -l ?


    Par avance merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,
    çà devrait se faire via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.exec_command('/usr/sbin/asterisk -rx "database show"')
    pour "ls -l", c'est un peu plus sportif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stdin, stdout, stderr = client.exec_command("ls -l")
    for line in stdout.read().splitlines():
         print (line)
    Ceci dit, vous avez plein d'exemples en cherchant un peu sur le net.
    Et la documentation n'est pas mal non plus.

    Et pour bien te former, les cours et tutoriels pour apprendre Python https://python.developpez.com/cours/


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

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut remerciement
    Super merci beaucoup pour l'aide.

    Je n'arrivais pas à trouver et comprendre comment cela fonctionne.

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut commande speciale
    Lorsque j'utilise cette commande j'ai un message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stdin, stdout, stderr = client.exec_command('/usr/sbin/asterisk -rx "database put test',numero,'maison"')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
        return self.func(*args)
      File "C:\Users\user\Desktop\programmation python\asterisk\projet avec ssh\La base\entry.py", line 45, in ajoutnumero
        stdin, stdout, stderr = client.exec_command('/usr/sbin/asterisk -rx "database put test',numero,'maison"')
    TypeError: exec_command() takes at most 3 arguments (4 given)
    Pourtant je suis en version python 2.6 et lorsque je fais un print cela fonctionne tres bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    numero=112
    print'/usr/sbin/asterisk -rx "database put test',numero,'maison"'
    Par avance encore merci


    Code en entier :
    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
    # -*- coding: cp1252 -*-
    #chargement du module graphique
    from Tkinter import *
    import Tkinter as tk
    #chargement des commandes de l os
    import os
    #chargement du module ssh
    import paramiko
    #chargement du module de fenetre secondaire
    import tkMessageBox
     
     
    #creation fenetre principal
    fenetre = Tk()
    fenetre.geometry("800x600+300+0")
     
    #placement du text sur l interface
    txt1 = Label(fenetre, text="Telephonie")
    txt1.pack()
    txt2 = Label(fenetre, text="Indiquer le numero de votre nouveau contact puis cliquer sur Ajouter:")
    txt2.place(x=45, y=40)
     
    #commande qui va ajouter le numero lors d un clic sur le bouton Ajouter
    def ajoutnumero():
     
        if le_numero_en_int.get() <= 1 or le_numero_en_int.get() >= 9999999999 :
            # si le numero et inferieur ou egale a 1 OU superieur ou egale a 9999999999
            tkMessageBox.showinfo("Erreur", "Le numéro de telephone est invalide")
            numero = le_numero_en_int.get()
            print("if",numero)
        else:
            # sinon le numero est ok on l enregistre sur asterisk
            numero = le_numero_en_int.get()
            client = paramiko.SSHClient()
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            client.connect('192.168.1.14', username='root', password='azerty')
            stdin, stdout, stderr = client.exec_command("mkdir test")
            stdin, stdout, stderr = client.exec_command("ls")
            for line in stdout.read().splitlines():
                print (line)
            stdin, stdout, stderr = client.exec_command("rm -r test")
            stdin, stdout, stderr = client.exec_command('/usr/sbin/asterisk -rx "database put test',numero,'maison"')
            client.close()
            tkMessageBox.showinfo("Erreur", "Ajout au carnet d adresse effectué pour le numero")
            print("else",numero)
            print'/usr/sbin/asterisk -rx "database put test',numero,'maison"'
     
     
     
    # Création d'un widget Entry (champ de saisie)
    le_numero_en_int = tk.IntVar()
    le_numero = Entry(fenetre, bg ='bisque', fg='maroon', textvariable=le_numero_en_int).place(x=45, y=120)
     
    #Bouton qui permet d ajouter le numero saisie dans le widget Entry
    bouton1=Button(fenetre, text="Ajouter", command=ajoutnumero).place(x=125, y=115)

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    En Python2.6, la commande print n'a pas besoin de parenthèses pour concaténer la liste d'arguments.
    Par contre, si le premier argument d'une fonction doit être une chaîne de caractère et que vous lui passez 3 arguments, çà restera 3 arguments. C'est à vous de concaténer "avant".

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

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut
    Merci beaucoup pour votre réponse.
    Je n'ai pas du tout le niveau pour comprendre celle-ci... Auriez vous un livre ou tuto (français) à me conseiller pour apprendre à programmer en python avec tkinter ?

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

Discussions similaires

  1. comment utiliser cURL dans php pour envoyer des données de php vers application android
    Par myaset dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 15/04/2013, 13h44
  2. [2.x] Commande pour envoyer des emails
    Par waxx59 dans le forum Symfony
    Réponses: 5
    Dernier message: 27/12/2012, 17h31
  3. Réponses: 31
    Dernier message: 01/10/2009, 14h21
  4. [Prototype] Utiliser Json pour envoyer des données au serveur
    Par GandalfZeGrey dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 14/02/2008, 17h16
  5. Utiliser hylafax pour envoyer des fax
    Par ggnore dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 08/07/2004, 21h57

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