我需要在我的本地Web服務器上允許PHP腳本,以SSH連接到另一臺計算機,以便在某些文件上執行指定的任務。我的httpd
以低權限運行爲_www
,因此設置直接無密碼SSH很困難,不要說不明智。允許PHP腳本ssh使用sudo
現在我做的方法是讓一個最小的PHP腳本,sudo-exec的(就像我)一個shell腳本在文檔根之外。 shell腳本依次調用(和我一樣)執行SSH實際工作的PHP代碼,並打印它的輸出。這是代碼。
read_remote_files.php
(我是從我的瀏覽器調用腳本):
exec('sudo -u me -n /home/me/run_php.sh /path/to/my_prog.php', $results);
print $results;
/home/me/run_php.sh
(運行作爲我,稱不管它給):
php $1 2>&1
sudoers
:
_www ALL = (me) NOPASSWD: /home/me/run_php.sh
這一切都有效,因爲my_prog.php被稱爲我並且可以和我一樣SSH。看起來它不是太不安全,因爲run_php.sh
不能直接從瀏覽器(文檔根外)調用。我遇到的問題是my_prog.php
未被稱爲HTTP程序,因此無法訪問HTTP環境變量(DOCUMENT_ROOT等)。
兩個問題:
- 上午我做這個太複雜了?
- 是否有一個簡單的方法讓我的最終腳本獲取HTTP變量?
謝謝! Andy
如果你的服務器配置從不/很少改變,那麼就硬編碼所需的值到您的遠程腳本,否則你會試圖在腳本中重新創建一個Apache運行時環境。 – 2012-01-12 21:44:03
使用php和ssh我這種方式非常不正統,請問你爲什麼試圖以這種方式提供文件?爲什麼不使用網絡文件系統而不使用SSH或Web代理/防火牆而不使用PHP? – 2012-01-12 21:46:20
大衛,是的,這絕對是非正統的!我有很多服務器運行不同的任務,我需要ssh的靈活性來檢查運行的進程。我通過ssh(直接或通過Windows機器上的Cygwin)管理所有內容。我正在使用php爲一些日常任務提供Web界面。 – 2012-01-12 22:02:24