443 的 ssh 隧道

443 的 ssh 隧道

我需要通过链接(443)获取文件,这只能从服务器获取B

我有 3 台服务器,(ABC)。

可以访问服务器wget并从服务器下载此文件C

wget https://NAME:[email protected]/customerInfo/804-577823-10 --no-check-certificate
...
2021-06-18 16:18:01 (24,7 MB/s) - ‘804-577823-10’ saved [163/163]

A,只允许用于端口22(ssh),而不允许用于端口443

我需要建一条隧道,穿过A通过22并从下载文件C通过wget端口443,完全相同的方式,就像我在服务器上一样

简而言之,我需要一个来自A然后我需要使用端口443,用于应用/下载文件C通过wgetA,方法与

我尝试过,但是没有成功。

ssh -L 4433:C:443 -Nf B

我甚至尝试使用代理,但没有成功。

wget -e use_proxy=yes -e http_proxy=C https://NAME:[email protected]/customerInfo/804-577823-10 --no-check-certificate

是否可以?

谢谢。

更新

SERVER_A:443 -> ssh tunnel by port 22 through SERVER_B -> SERVER_C:443

所以如果我使用服务器 A与 相同的链接服务器 B,我想wget通过服务器端

最简单的方法是允许443端口服务器端为了服务器 A,但在这种情况下这是不可能的。

仅允许端口22之间服务器 A服务器 B

现在最清楚了吗?

谢谢。

答案1

这取决于谁拥有服务器的权限,以确定您能做什么。另外,我不太明白这是一次性下载还是您需要永久解决方案。

阅读完你的问题后,我会使用安全外壳进入服务器 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:~/"

但是您需要让服务器 B 在服务器 A 上安装其公共证书,这样就无需密码。另一种方法是使用上面解释的 2 命令脚本。

答案2

实际上,您可以通过 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:[email protected]/customerInfo/804-577823-10 --no-check-certificate
# kill -INT %1

或者,如果您不想使用 root,则需要绑定到高于 1024 的端口,通常人们使用 10443。所以...

$ ssh user@serverB -T -N -L 127.1.2.3:10443:serverC:443 &
$ wget https://NAME:[email protected]:10443/customerInfo/804-577823-10 --no-check-certificate
$ kill -INT %1

此外,当您通过隧道访问 HTTP 服务器时,HTTP 服务器可能只知道如何通过完全限定域名 (FQDN) 访问您要查找的内容。如果是这样,您可以将参数添加--header='Host: www.example.com'到 wget 命令中,以告知服务器您正在寻找该特定名称下的内容。

还请注意,您可以绑定到任何 127.xxx 地址,如果您要绑定到许多不同的服务器并且想要更清楚地区分它们,这将非常有用。通常我会将绑定目标的设备的第一个八位字节替换为 127,因此,像 10.194.27.18 这样的地址将变成 127.194.27.18。如果您要绑定到多个 HTTP 服务器并且想要防止 cookie 重叠,这将为您省去很多麻烦。

希望这对某人有帮助!我知道这个问题有点过时了。

相关内容