我需要通过一个链接(443)获得一个文件,这个链接只能从服务器B获得。
我有3台服务器(A B、C)。
可以访问服务器B并通过wget从服务器C下载该文件。
wget https://NAME:PASS@DOMAIN.net/customerInfo/804-577823-10 --no-check-certificate
...
2021-06-18 16:18:01 (24,7 MB/s) - ‘804-577823-10’ saved [163/163]从<>A到B,它只允许用于端口22 (ssh),而不允许用于端口443。
我需要建立一个隧道,通过22从<>A到B,然后通过wget端口443从C下载文件,就像我在服务器B上一样。
简而言之,我需要一个从<>A到B的ssh隧道,然后我需要使用端口443,通过A通过wget应用/下载<>C上的文件,就像在B上那样。
我试过了,但没有成功。
ssh -L 4433:C:443 -Nf B我连代理都试过了,但没有成功。
wget -e use_proxy=yes -e http_proxy=C https://NAME:PASS@DOMAIN.net/customerInfo/804-577823-10 --no-check-certificate有可能吗?
谢谢。
更新
SERVER_A:443 -> ssh tunnel by port 22 through SERVER_B -> SERVER_C:443因此,如果我在<#>SERVER_A上使用与SERVER_B相同的链接,则希望通过wget从SERVER_C获取文件。
最简单的方法是允许SERVER_C上的443端口用于SERVER_A,但在这种情况下是不可能的。
只允许在SERVER_A和SERVER_B之间使用端口22。
现在是最清晰的了?
谢谢。
发布于 2021-06-18 14:05:18
这取决于谁拥有服务器的权限,以便确定您能够做什么。另外,我不太明白的是,如果这是一次下载或您需要一个永久的解决方案。
在阅读完您的问题后,我将使用一个安全的shell进入服务器B。
$ ssh user@serverB然后从那里下载文件。(最后一点很重要)
$ scp -P 443 user@serverC:/path/to/file.txt .在此之后,您可以将其发送到服务器A
$ scp file.txt user@serverA:~/也有更复杂的解决方案,但这取决于你的需要和行动的自由。
更新:
您可以通过ssh向服务器发送命令。
ssh user@serverB "wget your file at C"您可以执行以下双重命令:
ssh user@serverB "wget your file @C:443 && scp file.txt you@serverA:~/"但是,您需要让serverB在serverA上安装他的公共证书,这样才能无言通过。另一种方法是一个2命令脚本,如上面所解释的。
发布于 2022-04-22 03:03:17
实际上,您可以在一个命令中通过SSH连接传递输出。假设您正在服务器A上运行此命令,我认为下面的命令可以运行。
$ ssh user@serverB "wget https://NAME:PASS@serverC/customerInfo/804-577823-10 --no-check-certificate -O -" > 804-577823-10.txt这将连接到服务器B,运行wget命令从服务器C获取内容,并通过STDOUT输出,然后在服务器A上捕获804-577823-10.txt。
如果您想在服务器A之外的工作站执行此操作,还可以执行以下操作:
$ ssh -J user@serverA user@serverB "wget https://NAME:PASS@serverC/customerInfo/804-577823-10 --no-check-certificate -O -" > 804-577823-10.txt这将使用服务器A作为跳转框,然后执行与前面命令相同的操作。我还使用-A进行代理转发,如果您的凭据是跨服务器共享的,则可以使用它,所以.
$ ssh -A -J user@serverA user@serverB "wget https://NAME:PASS@serverC/customerInfo/804-577823-10 --no-check-certificate -O -" > 804-577823-10.txt最后,如果您想在端口443上创建一个从服务器A到服务器C的隧道,可以执行以下操作:
$ sudo -i # Required to bind to port 443.
# ssh user@serverB -T -N -L 127.1.2.3:443:serverC:443 &
# wget https://NAME:PASS@127.1.2.3/customerInfo/804-577823-10 --no-check-certificate
# kill -INT %1或者,如果不使用根,则需要绑定到高于1024的端口,通常人们使用10443。所以..。
$ ssh user@serverB -T -N -L 127.1.2.3:10443:serverC:443 &
$ wget https://NAME:PASS@127.1.2.3:10443/customerInfo/804-577823-10 --no-check-certificate
$ kill -INT %1另外,当您通过隧道访问HTTP服务器时,HTTP服务器可能只知道如何通过完全限定的域名(FQDN)访问您要查找的内容。如果是这样的话,您可以将参数--header='Host: www.example.com'添加到wget命令中,以告诉服务器您要在该特定名称下查找内容。
还请注意,您可以绑定到任何127.x.x.x地址,如果您绑定到许多不同的服务器,并且希望更清楚地区分它们,这是非常有用的。通常,我所做的是用127替换我要绑定的设备的第一个八进制,所以,类似于10.194.27.18将变成127.194.27.18。如果您绑定到多个HTTP服务器并希望避免cookie中的重叠,这将为您节省很多麻烦。
希望这能帮到别人!我知道这个问题有点过时了。
https://askubuntu.com/questions/1346725
复制相似问题