0

我正在使用 Paramiko 将一些图像下载到本地主机,然后通过 SSH 将它们上传到服务器。

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

与此类似的东西: https ://unix.stackexchange.com/questions/9029/how-to-wget-a-file-to-a-remote-machine-over-ssh

但是在 Python 中。

4

1 回答 1

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 解决方案可能只会帮助您开始传输。

如果您在 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。

于 2013-03-22T04:35:36.027 回答