首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ssh隧道443座

ssh隧道443座
EN

Ask Ubuntu用户
提问于 2021-06-18 13:45:50
回答 2查看 699关注 0票数 0

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

我有3台服务器(A B、C)。

可以访问服务器B并通过wget从服务器C下载该文件。

代码语言:javascript
复制
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端口443C下载文件,就像我在服务器B上一样。

简而言之,我需要一个从<>A到B的ssh隧道,然后我需要使用端口443,通过A通过wget应用/下载<>C上的文件,就像在B上那样。

我试过了,但没有成功。

代码语言:javascript
复制
ssh -L 4433:C:443 -Nf B

我连代理都试过了,但没有成功。

代码语言:javascript
复制
wget -e use_proxy=yes -e http_proxy=C https://NAME:PASS@DOMAIN.net/customerInfo/804-577823-10 --no-check-certificate

有可能吗?

谢谢。

更新

代码语言:javascript
复制
SERVER_A:443 -> ssh tunnel by port 22 through SERVER_B -> SERVER_C:443

因此,如果我在<#>SERVER_A上使用与SERVER_B相同的链接,则希望通过wgetSERVER_C获取文件。

最简单的方法是允许SERVER_C上的443端口用于SERVER_A,但在这种情况下是不可能的。

只允许在SERVER_ASERVER_B之间使用端口22

现在是最清晰的了?

谢谢。

EN

回答 2

Ask Ubuntu用户

发布于 2021-06-18 14:05:18

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

在阅读完您的问题后,我将使用一个安全的shell进入服务器B。

代码语言:javascript
复制
$ ssh user@serverB

然后从那里下载文件。(最后一点很重要)

代码语言:javascript
复制
$ scp -P 443 user@serverC:/path/to/file.txt  .

在此之后,您可以将其发送到服务器A

代码语言:javascript
复制
$ scp file.txt user@serverA:~/

也有更复杂的解决方案,但这取决于你的需要和行动的自由。

更新

您可以通过ssh向服务器发送命令。

代码语言:javascript
复制
ssh user@serverB "wget your file at C"

您可以执行以下双重命令:

代码语言:javascript
复制
ssh user@serverB "wget your file @C:443  && scp file.txt you@serverA:~/"

但是,您需要让serverB在serverA上安装他的公共证书,这样才能无言通过。另一种方法是一个2命令脚本,如上面所解释的。

票数 2
EN

Ask Ubuntu用户

发布于 2022-04-22 03:03:17

实际上,您可以在一个命令中通过SSH连接传递输出。假设您正在服务器A上运行此命令,我认为下面的命令可以运行。

代码语言:javascript
复制
$ 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之外的工作站执行此操作,还可以执行以下操作:

代码语言:javascript
复制
$ 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进行代理转发,如果您的凭据是跨服务器共享的,则可以使用它,所以.

代码语言:javascript
复制
$ 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的隧道,可以执行以下操作:

代码语言:javascript
复制
$ 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。所以..。

代码语言:javascript
复制
$ 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中的重叠,这将为您节省很多麻烦。

希望这能帮到别人!我知道这个问题有点过时了。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1346725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档