1. Je trouve que ton code manque beaucoup de classes (au sens OO du terme)

2. Le nommage de tes variables me semble relever de pratiques pas du tout pythoniques (http://www.python-in-business.org/ep2005/talk.chtml?talk=3001&track=770).

3. Plutôt que de faire appel à des librairies exotiques (ce qui peut avoir sa justification dans certain cas, un system os.system() ou os.popen() sur un scp ou un sftp peut s'avérer infiniment plus simple à mettre en oeuvre.

  S.

Cédric MARFIL wrote:
Merci,
Paramiko a fait mon bonheur :

Voici le contenu de mon fichier Tool :

#
############################################################################
##
# # unilogToolsFtp
#
#
############################################################################
##
# # Ce module requiert l'installation du package python paramiko disponible
a  #
# # l'url suivante : http://www.lag.net/paramiko
#
#
############################################################################
##
import ftplib
import sys
import os
import paramiko

from unilogToolsFile import getCorrectPath

#
############################################################################
##
# #                                F.T.P.
#
#
############################################################################
##
def getFtpConnection(pFtpLogin, pFtpPassword, pFtpHost, pFtpPort='21'):
    print 'getFtpConnection'
    toReturn = None
    status = ''

    print 'Creation FTP'
    try:
        toReturn = ftplib.FTP()
    except:
        toReturn = None
        status = 'Could not create FTP object'

    print 'Connect'
    if toReturn is not None:
        try:
            toReturn.connect(pFtpHost, pFtpPort)
        except:
            toReturn = None
            status = 'Could not connect to FTP Server, please check host and
port'

    print 'Login'
    if toReturn is not None:
        try:
            toReturn.login(pFtpLogin, pFtpPassword)
        except:
            toReturn = None
            status = 'Could not login FTP Server, please check login and
password'

    print 'Connexion etablie'
    if toReturn is not None:
        status = 'Connection established'

    return toReturn, status

def getFtpBinaryFile(pConnection, pFtpFilePath, pFtpFileName,
pOutFile=None):
    if pOutFile is None:
        pOutFile = sys.stdout
    if pConnection is not None:
        pConnection.retrbinary("RETR " + pFtpFilePath + pFtpFileName,
pOutFile.write)


def getFtpTextFile(pConnection, pFtpFilePath, pFtpFileName, pOutFile=None):
    if pOutFile is None:
        pOutFile = sys.stdout
    if pConnection is not None:
        pConnection.retrlines("RETR " + pFtpFilePath + pFtpFileName, lambda
s, w=outfile.write: w(s+"\n"))

#
############################################################################
##
# #                                S.S.H.
#
#
############################################################################
##
def openSshConnection(pSshLogin, pSshPassword, pSshHost, pSshPort=22):
    toReturn = None
    status = ''

    try:
        toReturn = paramiko.Transport((pSshHost, pSshPort))
    except:
        toReturn = None
        status = 'Could not create Transport object or connect to host'

    if toReturn is not None:
        try:
            toReturn.connect(username=pSshLogin, password=pSshPassword)
            status = 'Connection established'
        except:
            toReturn = None
            status = 'Could not login SSH Server, please check login and
password'

    return toReturn, status

def closeSshConnection(pConnection):
    pConnection.close()

def openSshSession(pConnection):
    toReturn = None
    status = ''

    if pConnection is not None:
        try:
            toReturn = pConnection.open_session()
            status = 'Session opened'
        except:
            toReturn = None
            status = 'Could not create Session : Problem during
open_session()'
    else:
        status = 'Could not create Session : Connection is not valid'

    return toReturn, status

def closeSshSession(pSession):
    pSession.close()

def openSshSftpClient(pConnection):
    toReturn = None
    status = ''

    if pConnection is not None:
        try:
            toReturn = pConnection.open_sftp_client()
            status = 'SFTP Client opened'
        except:
            toReturn = None
            status = 'SFTP Could not create Client : Problem during
open_sftp_client()'
    else:
        status = 'SFTP Could not create Client : Connection is not valid'

    return toReturn, status

def closeSshSftpClient(pClient):
    pClient.close()

def getSshBinaryFile(pSshSftpClient, pSshFilePath, pSshFileName,
pOutputFilePath=None, pOutputFileName=None):
    #CMA Gestion des parametres
    if pOutputFilePath is None:
        pOutputFilePath = ''
    if pOutputFileName is None:
        pOutputFileName = pSshFileName

    if pSshSftpClient is not None:
        #CMA Ouverture du fichier distant et lecture
        remoteFile = pSshSftpClient.open(pSshFilePath + pSshFileName, 'rb')
        remoteFileData = remoteFile.read()
        remoteFile.close()
        #CMA Ouverture du fichier local et ecriture
        outputFile = open(getCorrectPath(pOutputFilePath) + pOutputFileName,
'wb')
        outputFile.write(remoteFileData)
        outputFile.close

def getSshTextFile(pSshSftpClient, pSshFilePath, pSshFileName,
pOutputFilePath=None, pOutputFileName=None):
    #CMA Gestion des parametres
    if pOutputFilePath is None:
        pOutputFilePath = ''
    if pOutputFileName is None:
        pOutputFileName = pSshFileName

    if pSshSftpClient is not None:
        #CMA Ouverture du fichier distant et local
        remoteFile = pSshSftpClient.open(pSshFilePath + pSshFileName, 'r')
        outputFile = open(getCorrectPath(pOutputFilePath) + pOutputFileName,
'w')
        #CMA Parcours des lignes du fichier distant et ecriture du fichier
local
        for line in remoteFile.readlines():
            outputFile.write(line)
        #CMA Fermeture des fichiers
        remoteFile.close()
        outputFile.close

Et l'utilisation qui en est faîte dans mon code :
    def getConfigurationFile(self):
        #CMA Ouverture de la connexion SSH
        sshConnection, sshConnectionStatus = openSshConnection(
            pSshLogin=self._sshLogin,
            pSshPassword=self._sshPassword,
            pSshHost=self._sshHost,
            pSshPort=self._sshPort
        )
        print sshConnectionStatus

        #CMA Ouverture du client SFTP
        sshSftpClient, sshSftpClientStatus =
openSshSftpClient(sshConnection)
        print sshSftpClientStatus

        #CMA Recuperation du fichier depuis le serveur
        getSshTextFile(
            pSshSftpClient=sshSftpClient,
            pSshFilePath=self._distantConfigurationFilePath,
            pSshFileName=self._distantConfigurationFileName,
            pOutputFilePath=self._parametersFilePath,
            pOutputFileName=self._configurationFileName
        )

        #CMA Fermeture du client SSH
        closeSshSftpClient(sshSftpClient)
        print 'Client ferme'

        #CMA Fermeture de la connexion SSH
        closeSshConnection(sshConnection)
        print 'Connection fermee'

Merci beaucoup.


Cédric Marfil
Unilog IT Services NRD
Marcq en Baroeul
Tél : 03.59.56.60.25
Mail : [EMAIL PROTECTED]

-----Message d'origine-----
De : Tarek Ziadé [mailto:[EMAIL PROTECTED]
Envoyé : mercredi 27 juillet 2005 11:20
À : Cédric MARFIL
Cc : Liste Nuxeo (E-mail)
Objet : Re: [CPS-users-fr] Connexion SSH en python

Cédric MARFIL wrote:


Bonjour,

Est-ce que quelqu'un connaît un méthode permettant de créer une
connexion SSH en python de manière à récupérer des fichiers en FTP sur
un serveur sécurisé ?

Apparemment le module ftplib permet de se connecter uniquement à des
serveurs simples.


Bonjour,
quelques bibliothèques à tester:

+ Dans Twisted le module conch, utilisé par exemple un package de Zope
corp ici pour du SFTP:
http://cvs.zope.org/Packages/SFTPGateway/

+ eventuellement: Paramiko, http://www.lag.net/paramiko/, basé sur pcrypto


--
Tarek Ziadé, Nuxeo R&D (Paris, France)
CPS Platform : http://www.cps-project.org
Zope3 / ECM   : http://www.z3lab.org
mail: tziade at nuxeo.com; tel: +33 (0) 6 30 37 02 63



------------------------------------------------------------------------

_______________________________________________
cps-users-fr Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr



--
Stéfane Fermigier, Tel: +33 (0)6 63 04 12 77 (mobile).
Nuxeo Collaborative Portal Server: http://www.nuxeo.com/cps
Gestion de contenu web / portail collaboratif / groupware / open source!
begin:vcard
fn:Stefane Fermigier
n:Fermigier;Stefane
org:Nuxeo
adr:;;14, rue Soleillet;Paris;;75020;France
email;internet:[EMAIL PROTECTED]
title:CEO
tel;work:+33 1 40 33 79 87
tel;fax:+33 1 43 58 14 15 
tel;cell:+33 6 63 04 12 77
url:http://www.nuxeo.com/
version:2.1
end:vcard

_______________________________________________
cps-users-fr 
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>

Répondre à