繁体   English   中英

如何在不使用Python下载到本地的情况下将数据从一台服务器传输到另一台服务器?

[英]How to transfer data from one server to another without downloading to local using Python?

我正在使用Paramiko将一些图像下载到localhost,然后通过SSH将其上传到服务器。

如何在不下载到本地的情况下实现它? 由于服务器在下载和上传大文件(> 100 mb)时超时。

类似于以下内容: https : //unix.stackexchange.com/questions/9029/how-to-wget-a-file-to-a-remote-machine-over-ssh

但是在Python中。

假设您具有这样的网络结构:

local machine ---X--- machine A
              |            |
              |            Z
              |            |
              ---Y---- machine B

那么您当前正在通过链接X下载,然后通过链接Y上传。 如果machine A可以直接与machine B对话,则链接Z也存在。 machine Amachine B均可公开访问的情况就是这种情况。

因此,您希望machine A启动将图像直接传输到machine B 此时,正是代码在machine A/B上运行来处理传输,因此Python解决方案很可能只会帮助您开始传输。

如果您是使用ssh在bash shell中进行此操作的,则可以输入以下内容:

ssh user@machineA 'scp myfile user@machineB'

这假定您具有对machine A上ssh服务器的外壳访问权限,并且已安装了scp程序。 Paramiko仅对建立与machine A的连接以启动传输有用,而对处理传输本身无效。

这样的事情可能会起作用:

ssh = paramiko.SSHClient()
ssh.connect('machineA', username='user', password='passwd')
stdin, stdout, stderr = ssh.exec_command("scp '{imgpath}' user@machineB".format(
    imgpath='path/to/file/on/machineA')

更新:

如果图像是从machine A但是您没有ssh登录访问权限,则可以通过登录machine B并执行命令来获取图像,将图像直接拉到machine B wget通常可用于此目的。 因此,从localhost执行此操作的代码可能是:

ssh = paramiko.SSHClient()
ssh.connect('machineB', username='user', password='passwd')
stdin, stdout, stderr = ssh.exec_command("wget '{imgurl}'".format(
    imgurl='http://url.to.image/file')

对于测试,只需跳过使用paramiko并直接使用ssh / wget即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM