如何通过SSH服务器下载文件?

lin*_*ida 32 ssh wget

我在美国有一台服务器(Linux box B)和我的家用电脑(Linux box A),我需要从网站 C 下载一个文件,

问题是,直接从A下载文件很慢,所以我需要在登录B时下载文件,然后sftp从A获取文件。

有什么办法可以只通过一行命令下载文件并直接使用B作为代理吗?

sr_*_*sr_ 49

(奇怪的情况,像三角不等式这样的东西对互联网路由不成立吗?)

无论如何,尝试以下操作,在A 上,通过参数ssh进入B-D

ssh -D 1080 address-of-B
Run Code Online (Sandbox Code Playgroud)

它充当 SOCKS5 代理127.0.0.1:1080,可以被任何支持 SOCKS5 代理连接的东西使用。 显然,wget可以通过使用环境变量来做到这一点

export SOCKS_SERVER=127.0.0.1:1080
wget http://server-C/whatever
Run Code Online (Sandbox Code Playgroud)

请注意,有时curl更方便(即我不确定是否wget可以通过 SOCKS5 进行主机名查找;但我想这不是您关心的问题之一);Firefox 也能够通过这样的 SOCKS5 代理完全工作。

编辑我刚刚注意到您正在寻找一种单行解决方案。嗯,怎么样

ssh address-of-B 'wget -O - http://server-C/whatever' >> whatever
Run Code Online (Sandbox Code Playgroud)

wget即将 -fetched 输出重定向到stdout,并将本地输出(从远程ssh运行wget)重定向到文件。

这似乎有效,wget输出只是有点混乱(“保存到 - ”),您可以通过添加-qwget调用中来摆脱它。

  • 显然,`SOCKS_SERVER` 环境变量对 Ubuntu 14.04 没有影响。 (6认同)
  • 根据 [this other answer](https://superuser.com/a/262972/10758),`wget` 不支持 `SOCKS_SERVER` 变量。该答案建议使用 `curl --socks5-hostname` 或 `curl --socks5`。 (6认同)