我在美国有一台服务器(Linux box B),我的家用电脑(Linux box A),我需要从网站 C 下载一个文件,
问题是,直接从A下载文件非常慢,所以我需要在登录B时下载文件,然后sftp
从A获取文件。
有什么办法可以只通过一行命令直接下载文件并使用 B 作为代理吗?
答案1
(奇怪的情况,不是像三角不等式保留互联网路由?)
无论如何,请尝试以下操作A,ssh
进入乙有-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
所有文件放入一个目录中。
到这里程序就可以愉快的运行了;您只需与屏幕分离,但让它在后台运行。
如果下载完成(可能更早),您可以从B
to A
using获取数据rsync
(我的偏好)。
答案3
灵感来自另一个问题的另一个答案,我建议使用代理链-ng(这是较新版本的代理链)。
- 下载、编译并可选择安装代理链-ng。
proxychains.conf
在当前目录或 at~/.proxychains/proxychains.conf
或 at中创建一个文件/etc/proxychains.conf
。- 或者,在其他位置或使用其他名称创建一个文件,并通过
-f
命令行参数或PROXYCHAINS_CONF_FILE
环境变量指定。 - 有一个示例配置文件可用的。最相关的选项位于最后。
- 或者,在其他位置或使用其他名称创建一个文件,并通过
在您的
proxychains.conf
文件中,添加:[ProxyList] socks5 127.0.0.1 1234
跑步
ssh -D 1234 your_host_b
。这将使 ssh 侦听本地主机上的端口 1234,并使用远程主机作为 SOCKS 代理。- 或者,改为跑步
ssh -ND 1234 your_host_b
。-N
将阻止 ssh 在远程服务器上运行任何命令(即它不会打开 shell)。
- 或者,改为跑步
- 跑步:
proxychains4 yourcommandhere yourparametershere
。看一些例子:proxychains4 wget -O - http://ifconfig.co/
proxychains4 -q links http://ifconfig.co/
答案4
您可以建立从框 A 到框 B 的 ssh 隧道,并将其添加到框 A 中的路由表,可以通过到框 B 的隧道访问网站 C。您必须允许在框 B 上转发数据包。
这里你可以看到一个非常好的分步教程......