cURL通过SSH隧道到远程服务器

时间:2016-08-18 15:31:56

标签: php curl ssh

我必须编写一个PHP脚本,该脚本将在最终确定时在我的客户端网络上执行。我的计算机(A)无法连接到该网络,但我可以通过SSH访问单个服务器(B)。 我的脚本必须对该网络上特定端口上的Web服务器(C)执行cURL请求(带有证书和私钥)。另一个困难是我没有C服务器的IP,只有在网络内部才能解析的URL。但是服务器B和C可以相互通信

基本上我看到3个步骤(但可能还有更多):

  1. 打开从计算机A到服务器B的SSH连接
  2. 将cURL请求发送到服务器C(https://my.remote.server.domain.com:8444)并存储响应
  3. 关闭SSH连接
  4. 问题是,我不知道该怎么做(我在网络相关的所有事情上基本上都是无知的)。任何人都有线索?

1 个答案:

答案 0 :(得分: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'

最后,不创建文件的脏(以及不推荐)方式如下:

$ ssh user@ssh_server << EOM
curl http://remote/server | nc -l 1234 &
exit
$ nc ssh_server 1234 > file

我应该再次提到,应该不惜一切代价避免使用这种技术,因为它传输未加密的数据并且不需要任何身份验证。另外,请记住,在执行命令之前,其他人可以使用相同的端口(1234)连接到服务器,从而自行检索结果,并使脚本保持挂起状态。

所以,最后一次,不要使用它。