如何使用远程服务器作为代理下载文件?

如何使用远程服务器作为代理下载文件?

有一些 http 文件链接我无法访问,但我有一个可以访问它们的远程服务器。

为了将这些文件下载到我的机器上,我使用远程服务器作为“代理”。这就是我所做的:

  1. ssh到远程服务器
  2. 在远程服务器上执行wget命令下载文件
  3. scp通过命令将下载的文件传输到我的机器上

我想问是否有更方便的方法来实现?喜欢:

some_command root@server http://xxxxx/file.zip ~/Desktop/

谢谢:)

答案1

SSH提供了方便的TCP SOCKS5代理模式及其-D/动态转发选项(我们使用默认的SOCKS端口:1080,您可以使用任何端口,只要在后面的设置中引用即可):

ssh -D 1080 someuser@server

您可以改为运行SSH命令在后台运行,因此它保持可用,无需将其保留在终端中供以后使用:

ssh -f -o ExitOnForwardFailure=yes -D 1080 someuser@server

不幸的是wget它本身不支持SOCKS协议。curl可以使用以下任一方法:

export http_proxy=socks5h://localhost:1080/ https_proxy=socks5h://localhost:1080/
curl -o ~/Desktop/file.zip http://xxxxx/file.zip

要不就:

curl --socks5-hostname localhost:1080 -o ~/Desktop/file.zip http://xxxxx/file.zip

如果您确实需要,wget则必须使用包装器。例如有proxychains这依赖于LD_PRELOAD拦截(还有其他的,比如但丁socksify客户端包装器以类似的方式工作或redsocks它本身依赖于特殊的防火墙设置来进行拦截)。

mkdir ~/.proxychains
(echo strict_chain; echo proxy_dns; echo '[ProxyList]'; echo socks5 127.0.0.1 1080) > ~/.proxychains/proxychains.conf

proxychains wget http://xxxxx/file.zip ~/Desktop/

答案2

如果远程计算机有 HTTP 代理(例如squidapache 的 httpd 的某些配置),您可以通过该代理发出请求。 env http_proxy=http://server:3128/ wget http://xxxxx/file.zip

如果远程计算机有 SOCKS 或 SOCKS5 代理,您可以通过该代理发出请求,但它可能需要wget.

如果您的 SSH 登录是干净的,您可以执行以下操作:

ssh -n user@server wget -O- http://xxxxx/file.zip >~/Desktop/file.zip

就我个人而言,我通常会进行远程操作wget,然后使用rsync.

相关内容