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>