我正在使用 Paramiko 将一些图像下载到本地主机,然后通过 SSH 将它们上传到服务器。
不下载到本地如何实现?由于服务器在下载和上传大文件 (> 100 mb) 时超时。
与此类似的东西: https ://unix.stackexchange.com/questions/9029/how-to-wget-a-file-to-a-remote-machine-over-ssh
但是在 Python 中。
我正在使用 Paramiko 将一些图像下载到本地主机,然后通过 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 A
情况machine B
。
因此,您希望将machine A
图像直接传输到machine B
. 此时,正在运行的代码正在machine A/B
处理传输,因此 Python 解决方案可能只会帮助您开始传输。
如果您在 bash shell 中使用 执行此操作ssh
,您可能会键入如下内容:
ssh user@machineA 'scp myfile user@machineB'
这假定您具有对 ssh 服务器的 shell 访问权限,machine A
并且它已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。