Je travaille sur un outil simple qui transfère les fichiers vers un emplacement codé en dur avec le mot de passe également codé en dur. Je suis novice en python, mais grâce à ftplib, c'était facile:
import ftplib
info= ('someuser', 'password') #hard-coded
def putfile(file, site, dir, user=(), verbose=True):
"""
upload a file by ftp to a site/directory
login hard-coded, binary transfer
"""
if verbose: print 'Uploading', file
local = open(file, 'rb')
remote = ftplib.FTP(site)
remote.login(*user)
remote.cwd(dir)
remote.storbinary('STOR ' + file, local, 1024)
remote.quit()
local.close()
if verbose: print 'Upload done.'
if __name__ == '__main__':
site = 'somewhere.com' #hard-coded
dir = './uploads/' #hard-coded
import sys, getpass
putfile(sys.argv[1], site, dir, user=info)
Le problème est que je ne trouve aucune bibliothèque prenant en charge sFTP. Quelle est la manière normale de faire quelque chose comme ça en toute sécurité?
Edit: Grâce aux réponses ici, je l'ai fait fonctionner avec Paramiko et c'était la syntaxe.
import paramiko
host = "THEHOST.com" #hard-coded
port = 22
transport = paramiko.Transport((host, port))
password = "THEPASSWORD" #hard-coded
username = "THEUSERNAME" #hard-coded
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
import sys
path = './THETARGETDIRECTORY/' + sys.argv[1] #hard-coded
localpath = sys.argv[1]
sftp.put(localpath, path)
sftp.close()
transport.close()
print 'Upload done.'
Merci encore!
Réponses:
Paramiko prend en charge SFTP. Je l'ai utilisé et j'ai utilisé Twisted. Les deux ont leur place, mais vous trouverez peut-être plus facile de commencer avec Paramiko.
la source
Vous devriez vérifier pysftp https://pypi.python.org/pypi/pysftp cela dépend de paramiko, mais encapsule les cas d'utilisation les plus courants à quelques lignes de code.
la source
with
l'exemplepip install pysftp
Si vous voulez facile et simple, vous voudrez peut-être aussi regarder Fabric . C'est un outil de déploiement automatisé comme Ruby's Capistrano, mais plus simple et bien sûr pour Python. Il est construit sur Paramiko.
Vous ne voudrez peut-être pas faire de `` déploiement automatisé '', mais Fabric conviendrait parfaitement à votre cas d'utilisation néanmoins. Pour vous montrer à quel point Fabric est simple: le fichier fab et la commande de votre script ressembleraient à ceci (non testé, mais sûr à 99% que cela fonctionnera):
fab_putfile.py:
Ensuite, exécutez le fichier avec la commande fab:
Et tu as fini! :)
la source
Voici un exemple utilisant pysftp et une clé privée.
pysftp est un module sftp facile à utiliser qui utilise paramiko et pycrypto. Il fournit une interface simple à sftp .. D'autres choses que vous pouvez faire avec pysftp qui sont très utiles:
Plus de commandes et sur PySFTP ici .
la source
srv.get(file_path) # Download a file from remote server
pouvez-vous expliquer où télécharge le fichier?Twisted peut vous aider dans ce que vous faites, consultez leur documentation, il y a plein d'exemples. C'est aussi un produit mature avec une grande communauté de développeurs / utilisateurs derrière lui.
la source
Avec RSA Key puis référez-vous ici
Fragment:
la source
Il y a un tas de réponses qui mentionnent pysftp, donc si vous voulez un wrapper de gestionnaire de contexte autour de pysftp, voici une solution qui est encore moins de code qui finit par ressembler à ce qui suit lorsqu'il est utilisé
L'exemple (plus complet): http://www.prschmid.com/2016/09/simple-opensftp-context-manager-for.html
Il se trouve que ce gestionnaire de contexte a une logique de relance automatique intégrée dans le cas où vous ne pouvez pas vous connecter la première fois (ce qui se produit étonnamment plus souvent que prévu dans un environnement de production ...)
L'essentiel du gestionnaire de contexte pour
open_sftp
: https://gist.github.com/prschmid/80a19c22012e42d4d6e791c1e4eb8515la source
Paramiko est si lent. Utilisez le sous-processus et le shell, voici un exemple:
la source
PyFilesystem avec ses sshfs est une option. Il utilise Paramiko sous le capot et fournit une interface indépendante de la palette plus agréable sur le dessus.
ou
la source
Vous pouvez utiliser le module pexpect
Voici un bon post d'introduction
Je n'ai pas testé ça mais ça devrait marcher
la source