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

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

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

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

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

答案1

(奇怪的情况,不是像三角不等式保留互联网路由?)

无论如何,请尝试以下操作Assh进入-D争论,

ssh -D 1080 address-of-B

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

export SOCKS_SERVER=127.0.0.1:1080
wget http://server-C/whatever

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

编辑我现在才注意到您正在寻找一条线解决方案。嗯,怎么样

ssh address-of-B 'wget -O - http://server-C/whatever' >> whatever

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

这似乎有效,wget输出只是有点令人困惑(“保存至 --q"),您可以通过添加到调用中来摆脱它wget

答案2

另一种方法可能是您通常登录到B并开始screen会话。在那里,您可以将wget所有文件放入一个目录中。

到这里程序就可以愉快的运行了;您只需与屏幕分离,但让它在后台运行。

如果下载完成(可能更早),您可以从Bto Ausing获取数据rsync(我的偏好)。

答案3

灵感来自另一个问题的另一个答案,我建议使用代理链-ng(这是较新版本的代理链)。

  1. 下载、编译并可选择安装代理链-ng
  2. proxychains.conf在当前目录或 at~/.proxychains/proxychains.conf或 at中创建一个文件/etc/proxychains.conf
    • 或者,在其他位置或使用其他名称创建一个文件,并通过-f命令行参数或PROXYCHAINS_CONF_FILE环境变量指定。
    • 有一个示例配置文件可用的。最相关的选项位于最后。
  3. 在您的proxychains.conf文件中,添加:

    [ProxyList]
    socks5 127.0.0.1 1234
    
  4. 跑步ssh -D 1234 your_host_b。这将使 ssh 侦听本地主机上的端口 1234,并使用远程主机作为 SOCKS 代理。

    • 或者,改为跑步ssh -ND 1234 your_host_b-N将阻止 ssh 在远程服务器上运行任何命令(即它不会打开 shell)。
  5. 跑步:proxychains4 yourcommandhere yourparametershere。看一些例子:
    • proxychains4 wget -O - http://ifconfig.co/
    • proxychains4 -q links http://ifconfig.co/

答案4

您可以建立从框 A 到框 B 的 ssh 隧道,并将其添加到框 A 中的路由表,可以通过到框 B 的隧道访问网站 C。您必须允许在框 B 上转发数据包。

这里你可以看到一个非常好的分步教程......

相关内容