【问题标题】:cURL to remote server through SSH tunnelcURL 通过 SSH 隧道连接到远程服务器
【发布时间】:2016-08-19 01:23:55
【问题描述】:

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

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

  1. 打开从计算机 A 到服务器 B 的 SSH 连接
  2. 向服务器 C (https://my.remote.server.domain.com:8444) 发送 cURL 请求并存储响应
  3. 关闭 SSH 连接

问题是,我不知道该怎么做(我对网络相关的所有事情基本上一无所知)。有人知道吗?

【问题讨论】:

    标签: php curl ssh


    【解决方案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) 连接到服务器,从而为自己检索结果,并使您的脚本挂起。

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

    【讨论】:

    • 在服务器B上创建文件是否不可避免?我不能直接得到响应吗(它只是一个 JSON 字符串)
    • 我已经更新了我的答案,想到了几个解决方案。
    猜你喜欢
    • 2017-01-01
    • 2020-07-05
    • 2017-09-27
    • 2016-11-18
    • 2019-11-19
    • 2019-11-12
    • 2020-09-30
    • 2019-01-29
    • 2016-02-13
    相关资源
    最近更新 更多