Copie sécurisée de Fichiers depuis le serveur distant par le scp et le module os en Python
Je suis assez nouveau à Python et à la programmation. Je suis en train de copier un fichier entre deux ordinateurs via un script python. Toutefois, le code
os.system("ssh " + hostname + " scp " + filepath + " " + user + "@" + localhost + ":" cwd)
ne fonctionne pas. Je pense qu'il a besoin d'un mot de passe, comme il est décrit dans Comment copier un fichier sur un serveur distant en Python à l'aide de SCP ou SSH?. Je n'ai pas tout les journaux d'erreur, le fichier ne s'affichent pas dans mon répertoire de travail courant.
Cependant, toutes les autres commandes avec os.system("ssh " + hostname + "command")
ou os.popen("ssh " + hostname + "command")
fonctionne. -> command = e.g. ls
Quand j'essaie
ssh hostname scp file user@local:directory
dans la ligne de commande, il fonctionne sans entrer un mot de passe.
J'ai essayé de combiner os.popen
commandes avec getpass et pxssh module d'établir une connexion ssh vers le serveur distant et l'utiliser pour envoyer des commandes directement (j'ai testé uniquement pour une simple commande):
import pxssh
import getpass
ssh = pxssh.pxssh()
ssh.force_password = True
hostname = raw_input("Hostname: ")
user = raw_input("Username: ")
password = getpass.getpass("Password: ")
ssh.login(hostname, user, password)
test = os.popen("hostname")
print test
Mais je ne suis pas capable de mettre les commandes par l'intermédiaire du serveur à distance (print test
montre, que le nom d'hôte = local et non pas le serveur distant), cependant, je suis sûr, la connexion est établie. J'ai pensé qu'il serait plus facile d'établir une connexion de toujours utiliser "ssh " + hostname
dans les commandes bash. J'ai aussi essayé quelques solutions de contournement dans Comment copier un fichier sur un serveur distant en Python à l'aide de SCP ou SSH?, mais je dois admettre que, en raison du manque d'activité je n'ai pas les faire travailler.
Merci beaucoup de m'aider.
ssh hostname scp
? Pourquoi ne pas simplement scp user@hostname:file localdirectory
?Préférez la
subprocess
module sur os.system()
pour des raisons de sécurité.Je n'ai pas pensé à la possibilité de copier via
scp user@hostname:file localdirectory
. Il fonctionne, mais uniquement quand je annuler la user@
partie.Je ne connaissais pas le
subprocess
module jusqu'à maintenant, mais je vais le prendre en considération (comme je l'ai dit je suis nouveau sur python et de l'apprentissage, j'ai besoin de quelques temps pour adopter)OriginalL'auteur user1063572 | 2011-11-24
Vous devez vous connecter pour publier un commentaire.
Je pense que le plus simple (pour éviter d'avoir à entrer un mot de passe) et la plus sûre façon d'aller à ce sujet est à la première série publique/clé privée d'authentification. Une fois que c'est fait, et vous pouvez vous connecter au système à distance en faisant
ssh user@hostname
, la commande bash suivante serait de faire le tour:Le correspondant du code Python serait:
OriginalL'auteur englebip