2010-02-16 55 views
0

我目前正在嘗試弄清楚如何使用PHP的shell函數通過SSH連接到另一臺服務器。我有一個站點,我必須將數據從PHP傳遞到自定義命令行程序,然後返回輸出。在我用的是舊的服務器,這是可能通過exec()函數:通過PHP的exec()函數連接到SSH。

$cmd = '/path/to/custom/program "arg1", "arg2", "arg3"'; 
exec($cms, $output); 

$輸出,當然,會再抱我的程序返回的數據。

我現在處於主機不允許我運行自定義程序的位置。但是,PHP的shell函數仍然可用。主機建議我將PHP設置爲SSH到另一臺服務器,運行我需要運行的命令,然後返回輸出。這似乎是一種令人難以置信的做事背後的方式,但我知道什麼?

我的具體問題涉及如何將登錄信息傳遞給exec()命令。例如,當我手動連接到任何SSH服務器,我把:

ssh myserver.com -l myusername 

然後我看到:

[email protected]'s password: 

如果我是通過 「SSH myserver.com -l名爲myUsername」 爲命令exec(),我會怎麼給它的密碼?之後,我如何才能知道我的身份驗證和連接正確,因此我可以爲我的程序運行該命令?

哦,還有,我不要有權訪問PHP中的ssh2函數,我也不能安裝該擴展。

回答

0

您需要用新的工藝的雙向通信從你的PHP代碼 - 既然如此,proc_open(...)是你可以用它來運行ssh唯一的PHP函數。

之後 - 它只是一個編寫代碼等待提示並響應它們的問題。

但是有一個用PHP編寫的ssh實現在phpclasses上發佈 - 儘管我不知道它有多快/高效/可靠/兼容。我懷疑它不會比proc_open()方法更省力,可能還有更多。

C.

4

您可以使用密鑰來解決密碼問題。

http://pkeck.myweb.uga.edu/ssh/

+0

+1。使用普通舊密碼自動執行SSH並不好玩。 – Matchu 2010-02-16 18:34:34

+0

爲了做到這一點,我不需要能夠訪問我的主機(PHP腳本運行的那臺機器)的shell?這是我忘了提及的其他事情。沒有shell訪問主服務器上的任何內容。 – 2010-02-16 19:02:12

+0

是執行php的主服務器還是您通過ssh連接的服務器? – jdizzle 2010-02-16 22:17:11

0

沒試過,但你是否認爲PHP的核心功能中繼()或系統()。

它們與exec()類似。