Quelle est la manière la plus pythonique de scp un fichier en Python? La seule voie que je connaisse est
os.system('scp "%s" "%s:%s"' % (localfile, remotehost, remotefile) )
qui est un hack, et qui ne fonctionne pas en dehors des systèmes de type Linux, et qui a besoin de l'aide du module Pexpect pour éviter les invites de mot de passe à moins que vous n'ayez déjà configuré SSH sans mot de passe sur l'hôte distant.
Je connais Twisted conch
, mais je préférerais éviter d'implémenter scp moi-même via des modules ssh de bas niveau.
Je suis au courant d' paramiko
un module Python qui prend en charge SSH et SFTP; mais il ne prend pas en charge SCP.
Contexte: je me connecte à un routeur qui ne prend pas en charge SFTP mais qui prend en charge SSH / SCP, donc SFTP n'est pas une option.
EDIT : Ceci est un double de Comment copier un fichier sur un serveur distant en Python en utilisant SCP ou SSH? . Cependant , cette question ne donne pas de réponse spécifique à scp qui traite des clés de Python. J'espère un moyen d'exécuter du code un peu comme
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
finit par appeler lascp
ligne de commande qui ne fonctionne que sur * nix.scp -t
ouscp -f
(modes 'to' et 'from', qui existent pour ce but côté serveur). C'est essentiellement ainsi que fonctionne scp - il repose sur une autre copie de scp existant sur le serveur. Cet article l'explique très bien: blogs.oracle.com/janp/entry/how_the_scp_protocol_worksimport paramiko
from scp import SCPClient
2. Voici un exemple de la commande scp.get ():scp.get(r'/nfs_home/appers/xxxx/test2.txt', r'C:\Users\xxxx\Desktop\MR_Test')
pip install scp
:, à la version 0.10.2 au moment de la rédaction de cet article.Vous pourriez être intéressé à essayer Pexpect ( code source ). Cela vous permettrait de traiter les invites interactives de votre mot de passe.
Voici un extrait d'un exemple d'utilisation (pour ftp) du site Web principal:
la source
Vous pouvez également consulter paramiko . Il n'y a pas (encore) de module scp, mais il prend entièrement en charge sftp.
[EDIT] Désolé, j'ai manqué la ligne où vous avez mentionné paramiko. Le module suivant est simplement une implémentation du protocole scp pour paramiko. Si vous ne voulez pas utiliser paramiko ou conch (les seules implémentations ssh que je connaisse pour python), vous pouvez retravailler cela pour exécuter une session ssh régulière en utilisant des tubes.
scp.py pour paramiko
la source
Impossible de trouver une réponse claire et ce module "scp.Client" n'existe pas. Au lieu de cela, cela me convient:
la source
si vous installez putty sur win32, vous obtenez un pscp (putty scp).
vous pouvez donc utiliser le hack os.system sur win32 aussi.
(et vous pouvez utiliser l'agent putty pour la gestion des clés)
désolé ce n'est qu'un hack (mais vous pouvez l'envelopper dans une classe python)
la source
Vous pouvez utiliser le sous-processus de package et l'appel de commande pour utiliser la commande scp à partir du shell.
la source
À partir d'aujourd'hui, la meilleure solution est probablement
AsyncSSH
https://asyncssh.readthedocs.io/en/latest/#scp-client
la source
Jetez un œil à fabric.transfer .
la source
Cela fait longtemps que cette question a été posée, et entre-temps, une autre bibliothèque capable de gérer cela a surgi: vous pouvez utiliser la fonction de copie incluse dans la bibliothèque Plumbum :
la source
SshMachine
a accèsssh-agent
, donc si vous voulez simplement éviter de le taper à chaque fois, c'est une façon de le faire. Vous pouvez également déposer une demande de fonctionnalité sur la page github de plumbum.la source
Si vous êtes sur * nix, vous pouvez utiliser sshpass
la source
Hmmm, une autre option serait peut-être d'utiliser quelque chose comme sshfs (il existe également un sshfs pour Mac). Une fois votre routeur monté, vous pouvez simplement copier les fichiers. Je ne sais pas si cela fonctionne pour votre application particulière, mais c'est une bonne solution à garder à portée de main.
la source
Il y a quelque temps, j'ai mis en place un script de copie SCP python qui dépend de paramiko. Il comprend du code pour gérer les connexions avec une clé privée ou un agent de clé SSH avec un retour à l'authentification par mot de passe.
http://code.activestate.com/recipes/576810-copy-files-over-ssh-using-paramiko/
la source
Je ne pense pas qu'il y ait un module que vous pouvez facilement télécharger pour implémenter scp, mais vous pourriez trouver cela utile: http://www.ibm.com/developerworks/linux/library/l-twist4.html
la source