Python - Transfer a file between two remote servers, excecuting a python script

人盡茶涼 提交于 2019-11-29 22:59:29

问题


I am trying to copy a file between two servers from a localServer, say from server-A to server-B. I am using paramiko package in python.

So there are three servers namely, localServer, server-A and server-B. Please see the below code, this is self explanatory and please let me know where I am going wrong.

Algorithm I am using:

  1. I am trying to run paramiko_test.py file from localServer.
  2. paramiko_test.py executes copy.py file in server-A.
  3. copy.py copies file source.txt file in server-A to server-B using SFTP.

When I run copy.py from server-A, it is working correct. But when I run paramiko_test.py from localServer (which indirectly executes copy.py in server-A), it is not working!

From logs, I got to know that there is a successful connection from server-A to server-B, but after that the SFTP part is not working!

Question: Can we invoke a SFTP client within a SFTP client? Is there any better way to copy files between two servers?

Please help me where I am going wrong.

server-A, file:copy.py:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('<server-B-IP>', username='serverB', password='passwd')

print "connected successfully!"

sftp = ssh.open_sftp()
print sftp
sftp.put('source.txt','/home/serverB/destination.txt' )
sftp.close()
print "copied successfully!"

ssh1.close()
exit()

localServer, paramiko_test.py:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('<server-A-IP>', username='serverA', password='passwd')

print "connected successfully!"

stdin, stdout, stderr = ssh.exec_command("python /home/username/copy.py")

print stdout.readlines()

print "copied successfully!"

ssh.close()
exit()

The output of stderr.readlines() is:

Traceback (most recent call last):
 File "/home/sitaram/sumanth/test_progs/copy.py", line 12, in <module>
 sftp1.put('./sumanth_temp.txt','/home/ncloudadmin/sumanth.txt' ) 
 File "/usr/lib/pymodules/python2.6/paramiko/sftp_client.py", line 558, in put
 file_size = os.stat(localpath).st_size
OSError: [Errno 2] No such file or directory: './sumanth_temp.txt'

回答1:


Question is year old, so probably not relevant anymore, but maybe it will be useful to others. The problem is in your copy.py.

sftp.put('source.txt','/home/serverB/destination.txt' )

where is source.txt located? Either provide full path, or if the file is always located in in the same dir as copy.py you could modify your paramiko_test.py

ssh.exec_command("cd /home/username/; python /home/username/copy.py")


来源:https://stackoverflow.com/questions/14625509/python-transfer-a-file-between-two-remote-servers-excecuting-a-python-script

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!