Was ist die pythonischste Art, eine Datei in Python zu scpen? Der einzige Weg, den ich kenne, ist
os.system('scp "%s" "%s:%s"' % (localfile, remotehost, remotefile) )
Dies ist ein Hack, der außerhalb von Linux-ähnlichen Systemen nicht funktioniert und der Hilfe vom Pexpect-Modul benötigt, um Kennwortabfragen zu vermeiden, es sei denn, Sie haben bereits kennwortloses SSH auf dem Remote-Host eingerichtet.
Ich bin mir Twisted's bewusst conch
, aber ich würde es vorziehen, die Implementierung von scp selbst über Low-Level-SSH-Module zu vermeiden.
Mir ist bekannt paramiko
, ein Python-Modul, das SSH und SFTP unterstützt. SCP wird jedoch nicht unterstützt.
Hintergrund: Ich verbinde mich mit einem Router, der SFTP nicht unterstützt, aber SSH / SCP unterstützt, sodass SFTP keine Option ist.
BEARBEITEN : Dies ist ein Duplikat von Wie kopiere ich eine Datei mit SCP oder SSH auf einen Remote-Server in Python? . Diese Frage gibt jedoch keine scp-spezifische Antwort, die sich mit Schlüsseln aus Python befasst. Ich hoffe auf eine Möglichkeit, Code so ähnlich auszuführen
import scp
client = scp.Client(host=host, user=user, keyfile=keyfile)
# or
client = scp.Client(host=host, user=user)
client.use_system_keys()
# or
client = scp.Client(host=host, user=user, password=password)
# and then
client.transfer('/etc/local/filename', '/etc/remote/filename')
scp
tatsächlich diescp
Befehlszeile aufruft , die nur unter * nix funktioniert.scp -t
oderscp -f
('zu' und 'von' Modi, die für diesen serverseitigen Zweck existieren). So funktioniert scp im Wesentlichen - es basiert auf einer anderen Kopie von scp, die auf dem Server vorhanden ist. Dieser Artikel erklärt es sehr gut: blogs.oracle.com/janp/entry/how_the_scp_protocol_worksimport paramiko
from scp import SCPClient
2. Hier ist ein Beispiel für den Befehl scp.get ():scp.get(r'/nfs_home/appers/xxxx/test2.txt', r'C:\Users\xxxx\Desktop\MR_Test')
pip install scp
ab Version 0.10.2.Möglicherweise möchten Sie Pexpect ( Quellcode ) ausprobieren . Auf diese Weise können Sie interaktive Eingabeaufforderungen für Ihr Kennwort bearbeiten.
Hier ist ein Auszug aus der Beispielverwendung (für FTP) von der Hauptwebsite:
quelle
Sie können auch paramiko ausprobieren . Es gibt (noch) kein scp-Modul, aber es unterstützt sftp vollständig.
[BEARBEITEN] Entschuldigung, ich habe die Zeile verpasst, in der Sie paramiko erwähnt haben. Das folgende Modul ist einfach eine Implementierung des scp-Protokolls für paramiko. Wenn Sie kein Paramiko oder Conch verwenden möchten (die einzigen mir bekannten SSH-Implementierungen für Python), können Sie dies überarbeiten, um eine reguläre SSH-Sitzung mit Pipes auszuführen.
scp.py für paramiko
quelle
Es konnte keine eindeutige Antwort gefunden werden, und dieses "scp.Client" -Modul ist nicht vorhanden. Stattdessen diese passt zu mir:
quelle
Wenn Sie Putty auf Win32 installieren, erhalten Sie ein PSCP (Putty SCP).
Sie können also den os.system-Hack auch für win32 verwenden.
(und Sie können den Putty-Agent für die Schlüsselverwaltung verwenden)
Entschuldigung, es ist nur ein Hack (aber Sie können es in eine Python-Klasse einwickeln)
quelle
Sie können den Paketunterprozess und den Befehlsaufruf verwenden, um den Befehl scp aus der Shell zu verwenden.
quelle
Ab heute ist wahrscheinlich die beste Lösung
AsyncSSH
https://asyncssh.readthedocs.io/en/latest/#scp-client
quelle
Schauen Sie sich Fabric.Transfer an .
quelle
Es ist schon eine ganze Weile , da diese Frage gestellt wurde, und in der Zwischenzeit eine andere Bibliothek , die diese beschnitten hat handhaben kann: Sie können die verwenden können Kopie in der mitgelieferten Funktion Plumbum Bibliothek:
quelle
SshMachine
hat Zugriff daraufssh-agent
. Wenn Sie also vermeiden möchten, es jedes Mal einzugeben, ist dies eine Möglichkeit, dies zu tun. Sie können auch eine Funktionsanforderung auf der Github-Seite von plumbum einreichen.Wenn Sie auf * nix sind, können Sie sshpass verwenden
quelle
quelle
Hmmm, vielleicht wäre eine andere Option, so etwas wie sshfs zu verwenden (es gibt auch ein sshfs für Mac). Sobald Ihr Router bereitgestellt ist, können Sie die Dateien direkt kopieren. Ich bin mir nicht sicher, ob das für Ihre spezielle Anwendung funktioniert, aber es ist eine gute Lösung, um es griffbereit zu halten.
quelle
Ich habe vor einiger Zeit ein Python-SCP-Kopierskript zusammengestellt, das von paramiko abhängt. Es enthält Code zur Verarbeitung von Verbindungen mit einem privaten Schlüssel oder einem SSH-Schlüsselagenten mit einem Fallback auf die Kennwortauthentifizierung.
http://code.activestate.com/recipes/576810-copy-files-over-ssh-using-paramiko/
quelle
Ich glaube nicht, dass es ein Modul gibt, das Sie einfach herunterladen können, um scp zu implementieren. Dies könnte jedoch hilfreich sein: http://www.ibm.com/developerworks/linux/library/l-twist4.html
quelle