php - cURL 通过 SSH 隧道连接到远程服务器

标签 php curl ssh

我必须编写一个 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 连接

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

最佳答案

使用 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/

相关文章:

php - 如何在 PHP 中调用变量上的函数?

php - 当列不存在时,查询中的 "column"IS NOT NULL 不会引发错误

php - 用于显示语法高亮显示的 HTML5 标记

ubuntu - Windows 10 WSL(Linux的Windows子系统)上的Ubuntu:无法与WGET和CURL建立SSL连接

curl - 在 Jenkins 中批准升级构建作业的 API (curl) 命令

c# - 将 CURL 转换为 C#

permissions - Cygwin Openssh看不到/etc/sshd_config

bash - UNIX 中具有正确时间戳的命令历史记录

php - 如果我们通过引用传递,不会创建 set 变量吗?

python - 如何在 Twisted Python 框架(Kippo HoneyPot 相关)中启用 diffie-hellman-group-exchange-sha1 作为 key 交换类型?