Python - Transfer a file between two remote servers, excecuting a python script
paramiko, python
Solution
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")
Problem
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: - I am trying to run `paramiko_test.py` file from `localServer`. - `paramiko_test.py` executes `copy.py` file in `server-A`. - `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' ```