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'
See Question&Answers more detail:
os