2016-08-18 113 views
2

我必須編寫一個PHP腳本,該腳本將在我的客戶端網絡上執行完成後執行。我的電腦(A)無法連接到該網絡,但我可以通過SSH訪問單個服務器(B)。 我的腳本必須對該網絡上的特定端口上的Web服務器(C)執行cURL請求(使用證書和私鑰)。另一個困難是我沒有C服務器的IP地址,只有在網絡內部才能解析的URL。但是服務器B和C可以彼此通過SSH隧道將cURL發送到遠程服務器

之間通信基本上我看到3個步驟(但可以有更多):

  1. 從計算機A打開SSH連接到服務器B
  2. 發送捲曲請求到服務器C(https://my.remote.server.domain.com:8444)和存儲響應
  3. 關閉SSH連接

的事情是,我不知道該怎麼做(我在所有的事情網絡RELAT基本上一無所知ED)。任何人都有線索?

回答

1

使用bash:

$ ssh [email protected]_server << EOM 
curl http://remote.server/ > /home/user/file 
EOM 
$ scp [email protected]_server:/home/user/file local_file 

這第一部分連接到你的SSH服務器(ssh_server),捲曲執行並保存在本地文件(SSH服務器上)。然後,scp用於在本地機器上下載文件。

創建臨時文件可能是最簡單的方法。你可以在/ tmp中創建它(如果你真的受不了具有文件存在,將其刪除後使用ssh + RM:)

$ ssh [email protected]_server 'rm /tmp/file' 

最後,髒(和不推薦)方式不創建文件如下:

$ ssh [email protected]_server << EOM 
curl http://remote/server | nc -l 1234 & 
exit 
$ nc ssh_server 1234 > file 

我也許應該不惜一切代價再次,這種技術應該避免提,因爲它傳輸未加密的數據,無需任何身份驗證。另外,請記住,其他人可以在執行命令之前使用同一端口(1234)連接到服務器,從而爲自己檢索結果,並掛起腳本。

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

+0

在服務器B上創建文件是不可避免的嗎?我不能直接得到響應(它只是一個JSON字符串) – 3rgo

+0

我已經用我的頭頂上的幾個解決方案更新了我的答案。 – fgiobergia