有一些 http 文件链接我无法访问,但我有一个可以访问它们的远程服务器。
为了将这些文件下载到我的机器上,我使用远程服务器作为“代理”。这就是我所做的:
ssh
到远程服务器- 在远程服务器上执行
wget
命令下载文件 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 代理(例如squid
apache 的 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
.