把通过 SSH 启动的下载保存到本地文件
在通过代理本地下载与远程获取后再传输之间做选择,并把命令输出与文件字节分开。
通过 SSH 运行下载器,与通过远程代理运行本地下载器,会把下载放在不同的地方:
| 安排 | 谁去获取网站? | 文件写到哪里 |
|---|---|---|
| 通过远程代理的本地下载器 | 本地 HTTP 客户端持有请求,代理负责转发 | 本地下载器的输出路径 |
| 通过 SSH 启动的下载器 | 远程机器上的程序 | 它自己的远程路径,除非数据被显式带回 |
有了获授权的 SSH 账号和远端已安装的 curl,你可以把产物带回标准输出:
ssh -T [email protected] 'curl --fail --silent --show-error https://downloads.example/file.bin' > file.part替换示例账号和 URL。重定向位于被引号括起的远程命令之外,所以本地 shell 会打开 file.part。把它放进远程命令里,这个路径就属于远程环境了。
使用一个全新的临时路径:在远程操作成功之前,本地 shell 就可能创建或截断该文件。在给它最终名字之前,先检查 SSH 的退出结果和产物。
标准输出里必须只有产物的字节。问候语、进度横幅或包装消息都会破坏它;诊断信息应走标准错误。把结果存成自己文件名的远程命令可能根本不回传任何字节。无论经过什么包装,都要保留下载器的退出结果。
你也可以改为在远端保存,再用 SFTP 传输文件。如果 SSH 已经使用了代理辅助程序,就复用那条 SSH 主机条目来做传输。如果目标是本地代理工作流,就让下载器留在本地,并配置它支持的代理接口。
无论如何,必须到达你笔记本电脑的文件仍然要经过它的网络连接。这个选择改变的是面向网站的连接,以及执行下载的进程。