我必须编写一个 PHP 脚本,该脚本将在完成后在我客户的网络上执行。我的计算机 (A) 无法连接到该网络,但我可以通过 SSH 访问该网络上的单个服务器 (B)。 我的脚本必须向该网络上特定端口上的 Web 服务器 (C) 发出 cURL 请求(带有证书和私钥)。另一个困难是我没有 C 服务器的 IP,只有一个只有在网络内才能解析的 URL。但是服务器B和C可以相互通信
基本上我看到了 3 个步骤(但可能还有更多):
- 打开从计算机A到服务器B的SSH连接
- 向服务器 C (https://my.remote.server.domain.com:8444) 发送 cURL 请求并存储响应
- 关闭 SSH 连接
问题是,我不知道该怎么做(我对所有与网络相关的事情基本上一无所知)。有人知道吗?
最佳答案
使用 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) 连接到服务器,从而为他们自己检索结果,并让您的脚本挂起。
所以,最后一次,不要使用它。
关于php - cURL 通过 SSH 隧道连接到远程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39022181/