我正在尝试设置 SSH 隧道,但我对这个过程不熟悉。这是我的设置:
机器 B 具有访问受限的 Web 服务。根据防火墙 IP 白名单,机器 A 已被授予访问机器 B 服务的权限。
我可以使用 ssh 连接连接到机器 A。之后,我尝试从本地主机访问机器 B 上的 Web 服务,但无法访问。
Web 服务端点如下所示:
service.test.organization.com:443/org/v1/sendData
到目前为止,我已经创建了一个像这样的 ssh 隧道:
ssh -L 1234:service.test.organization.com:443 [email protected]
我的理解是,使用这种方法,我可以点击 localhost:1234,它将通过机器 B 转发到 service.test.organization.com:443。
我已经确认,在机器 B 上,我可以执行一个 curl 命令来向 Web 服务发送消息,并且我得到了响应(所以这是有效的)。我尝试在浏览器中使用 PostMan,并从本地主机在终端中使用curl,但没有成功。 (
curl -X POST -d @test.xml localhost:1234/org/v1/sendData
)
错误消息:curl:(52)来自服务器的空回复
有很多关于 SSH 的材料,我正在筛选它们,但如果有人有任何指示,我将非常感激!
尝试添加
Host
HTTP 标头:curl -H "Host: service.test.organization.com" -X POST -d @test.xml http://localhost:1234/org/v1/sendData
网络问题是由请求格式引起的。我的请求对象是使用“localhost:1234”的目的地构建的。因此,即使它到达了正确的机器,机器也会忽略它。
为了解决这个问题,我在主机文件中添加了一条记录,如下所示:
service.test.organization.com 127.0.0.1
然后我就可以发送消息了。首先我打开隧道
ssh -L 443:service.test.organization.com:443 [email protected]
,
然后使用这个curl命令:curl -X POST -d @test.xml service.test.organization.com:443/org/v1/sendData
主机文件导致地址解析为本地主机,然后 ssh 隧道知道将其转发。
我的设置和你一样,唯一的区别是你在A主机上设置了SSH隧道,我在主机B上设置了它。所以我想在A内部使用B的服务。
但是主机A或B都不放在请求标头中是行不通的。
我和你有同样的错误,有连接,但响应为空,尽管处理程序应该明确返回一些 JSON。