我正在使用Paramiko将一些图像下载到localhost,然后通过SSH将它们上传到服务器。
如何在不下载到本地的情况下实现它?由于服务器在下载和上载大文件(> 100 mb)时超时。
类似的东西: https://unix.stackexchange.com/questions/9029/how-to-wget-a-file-to-a-remote-machine-over-ssh
但是在Python中。
答案 0 :(得分:1)
假设你有这样的网络结构:
local machine ---X--- machine A
| |
| Z
| |
---Y---- machine B
然后您正在通过链接X
下载,然后通过链接Y
上传。如果machine A
可以直接与machine B
对话,则链接Z
也会存在。如果machine A
和machine B
都可以公开访问,就会出现这种情况。
因此,您希望machine A
启动将图片直接转移到machine B
。此时,正在machine A/B
上运行的代码处理传输,因此Python解决方案可能只会帮助您开始传输。
如果您是使用ssh
从bash shell执行此操作,则可以键入以下内容:
ssh user@machineA 'scp myfile user@machineB'
这假设您对machine A
上的ssh服务器具有shell访问权限并且已安装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。