我正在尝试从localServer
的两个服务器之间复制文件,例如从server-A
复制到server-B
。我在python中使用paramiko包。
因此有三个服务器,localServer
,server-A
和server-B
。请看下面的代码,这是自我解释的,请告诉我出错的地方。
我正在使用的算法:
paramiko_test.py
运行localServer
文件。paramiko_test.py
在copy.py
中执行server-A
个文件。copy.py
使用SFTP将source.txt
中的文件server-A
文件复制到server-B
。当我从copy.py
运行server-A
时,它正常工作。但是,当我从paramiko_test.py
(在localServer
中间接执行copy.py
)运行server-A
时,它无效!
从日志中,我知道从server-A
到server-B
的连接成功,但之后SFTP部分无法正常工作!
问题:我们可以在SFTP客户端中调用SFTP客户端吗?有没有更好的方法在两台服务器之间复制文件?
请在我出错的地方帮助我。
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()
stderr.readlines()
的输出是:
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'
答案 0 :(得分:6)
问题是一年之久,所以可能不再相关,但也许对其他人有用。问题出在你的copy.py中。
sftp.put('source.txt','/home/serverB/destination.txt' )
source.txt位于哪里?要么提供完整路径,要么文件始终位于与copy.py相同的目录中,您可以修改paramiko_test.py
ssh.exec_command("cd /home/username/; python /home/username/copy.py")