Ich arbeite an einem einfachen Tool, das Dateien an einen fest codierten Speicherort überträgt, wobei das Kennwort ebenfalls fest codiert ist. Ich bin ein Python-Neuling, aber dank ftplib war es einfach:
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)
Das Problem ist, dass ich keine Bibliothek finden kann, die sFTP unterstützt. Was ist der normale Weg, um so etwas sicher zu machen?
Edit: Dank der Antworten hier habe ich es mit Paramiko zum Laufen gebracht und dies war die Syntax.
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.'
Danke noch einmal!
Antworten:
Paramiko unterstützt SFTP. Ich habe es benutzt und ich habe Twisted benutzt. Beide haben ihren Platz, aber es fällt Ihnen vielleicht leichter, mit Paramiko zu beginnen.
quelle
Sie sollten sich pysftp https://pypi.python.org/pypi/pysftp ansehen, es hängt von paramiko ab, aber die meisten Anwendungsfälle werden auf nur wenige Codezeilen beschränkt.
quelle
with
pip install pysftp
Wenn Sie einfach und unkompliziert sein möchten, sollten Sie sich auch Fabric ansehen . Es ist ein automatisiertes Bereitstellungstool wie Ruby's Capistrano, aber einfacher und natürlich für Python. Es baut auf Paramiko auf.
Möglicherweise möchten Sie keine automatisierte Bereitstellung durchführen, aber Fabric passt trotzdem perfekt zu Ihrem Anwendungsfall. Um Ihnen zu zeigen, wie einfach Fabric ist: Die Fab-Datei und der Befehl für Ihr Skript würden folgendermaßen aussehen (nicht getestet, aber zu 99% sicher, dass es funktioniert):
fab_putfile.py:
Führen Sie dann die Datei mit dem Befehl fab aus:
Und du bist fertig! :) :)
quelle
Hier ist ein Beispiel mit pysftp und einem privaten Schlüssel.
pysftp ist ein einfach zu bedienendes sftp-Modul, das paramiko und pycrypto verwendet. Es bietet eine einfache Schnittstelle zu sftp. Andere Dinge, die Sie mit pysftp tun können, die sehr nützlich sind:
Weitere Befehle und Informationen zu PySFTP finden Sie hier .
quelle
srv.get(file_path) # Download a file from remote server
Können Sie erklären, wohin die Datei heruntergeladen wird?Twisted kann Ihnen bei Ihrer Arbeit helfen. Lesen Sie die Dokumentation. Es gibt viele Beispiele. Es ist auch ein ausgereiftes Produkt mit einer großen Entwickler- / Benutzergemeinschaft dahinter.
quelle
Mit RSA Key dann hier verweisen
Snippet:
quelle
Es gibt eine Reihe von Antworten, in denen pysftp erwähnt wird. Wenn Sie also einen Kontextmanager-Wrapper für pysftp benötigen, finden Sie hier eine Lösung, die noch weniger Code enthält und bei Verwendung wie folgt aussieht
Das (ausführlichere) Beispiel: http://www.prschmid.com/2016/09/simple-opensftp-context-manager-for.html
In diesem Kontextmanager ist zufällig eine Logik für die automatische Wiederholung integriert, falls Sie beim ersten Mal keine Verbindung herstellen können (was überraschenderweise häufiger vorkommt, als Sie es in einer Produktionsumgebung erwarten würden ...).
Der Kontextmanager enthält folgende Informationen
open_sftp
: https://gist.github.com/prschmid/80a19c22012e42d4d6e791c1e4eb8515quelle
Paramiko ist so langsam. Verwenden Sie Unterprozess und Shell. Hier ein Beispiel:
quelle
PyFilesystem mit seinen sshfs ist eine Option. Es verwendet Paramiko unter der Haube und bietet darüber hinaus eine schönere, paltformunabhängige Oberfläche.
oder
quelle
Sie können das pexpect-Modul verwenden
Hier ist ein guter Intro-Beitrag
Ich habe das nicht getestet, aber es sollte funktionieren
quelle