通过SSH隧道向远程服务器使用cURL

3
我需要编写一个PHP脚本,在我的客户网络上执行。我的电脑(A)无法连接到该网络,但我可以通过SSH访问其中的一台服务器(B)。我的脚本必须进行带有证书和私钥的cURL请求,连接到该网络上特定端口上的Web服务器(C)。另一个困难是我没有C服务器的IP地址,只有在网络内才能解析的URL。但B和C服务器之间可以互相通信。
基本上,我看到三个步骤(但可能还有更多):
1.从计算机A打开SSH连接到服务器B 2.发送cURL请求到服务器C(https://my.remote.server.domain.com:8444),并存储响应 3.关闭SSH连接
问题是,我不知道如何做到这一点(我对所有与网络相关的事情都很无知)。有人有线索吗?
1个回答

1
使用Bash:
$ ssh user@ssh_server << EOM
curl http://remote.server/ > /home/user/file
EOM
$ scp user@ssh_server:/home/user/file local_file

这段文字涉及到连接ssh服务器(ssh_server),执行cURL并在ssh服务器本地保存文件。然后,使用scp下载文件到本地计算机。
创建临时文件可能是最简单的方法。您可以在/tmp中创建它(如果您真的无法忍受该文件存在,请使用ssh + rm删除它:)。
$ ssh user@ssh_server 'rm /tmp/file'

最后,一种不推荐的dirty方法是避免创建文件的方式如下:
$ ssh user@ssh_server << EOM
curl http://remote/server | nc -l 1234 &
exit
$ nc ssh_server 1234 > file

我应该再次提醒一下,这种技术应该尽可能避免使用,因为它传输的是未加密的数据,并且不需要任何身份验证。另外,请记住,在您的命令执行之前,其他人可能会使用相同的端口(1234)连接到服务器,从而将结果检索给自己,并使您的脚本挂起。
所以,最后一次,不要使用它。

在服务器B上创建一个文件是不可避免的吗?我不能直接获取响应吗(它只是一个JSON字符串)? - 3rgo
我已经更新了我的答案,并提供了几个我能想到的解决方案。 - Flavio Giobergia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接