我试图从localServer
之间的两个服务器之间复制文件,比如从server-A
到server-B
。我在Python中使用paramiko包。Python - 在两个远程服务器之间传输文件,执行python脚本
所以有三个服务器,即localServer
,server-A
和server-B
。请参阅下面的代码,这是不言自明的,请让我知道我要出错的地方。
算法我使用:
- 我试图从
localServer
运行paramiko_test.py
文件。 paramiko_test.py
执行copy.py
文件在server-A
。copy.py
使用SFTP将文件source.txt
server-A
改为server-B
。
当我从server-A
运行copy.py
时,它工作正常。但是,当我从localServer
(它间接执行copy.py
server-A
)运行paramiko_test.py
时,它不起作用!
从日志,我知道有一个从server-A
到server-B
成功的连接,但之后,SFTP部分不工作!
问题:我们可以调用SFTP客户端内的SFTP客户端吗?有没有更好的方法在两台服务器之间复制文件?
请帮我我哪里错了。
服务器-A,文件: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'
您看过织物吗?它比Paramiko更容易[使用文件](http://docs.fabfile.org/en/1.5/api/contrib/files.html),并且可以执行诸如[在远程服务器上放置文件]( http://docs.fabfile.org/en/1.5/api/core/operations.html#fabric.operations.put) –
嗨,亚历克斯,谢谢你的回复。我看着Fabric,我没有看到Fabric支持两台远程主机之间的文件传输,在另一台本地服务器上运行脚本。或者它是由Fabric支持的?请帮忙。 –
你可以SSH进入远程服务器之一,然后通过SFTP/SCP?你在'sterr'中得到了什么? –