Apache-2.2
使用 rsync 從 php 腳本內部將文件從本地上傳到遠端伺服器,而無需輸入密碼
我已經設置了一個公鑰來為我的使用者自動登錄遠端伺服器。
所以這從cli執行沒有任何問題:
rsync -r -a -v -e "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/;
但是,當我嘗試從 PHP 腳本(在我本地伺服器的網頁上)執行相同的腳本時:
$c='rsync -r -a -v -e --log-file=FILE "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/'; //exec($c,$data); passthru($c,$data); print_r($data);
這是我收到的:
2011/01/23 19:18:29 [6401] rsync: connection unexpectedly closed (0 bytes received so far) [sender] 2011/01/23 19:18:29 [6401] rsync error: unexplained error (code 255) at io.c(601) [sender=3.0.7]
權限 qre 設置如下:
Local: chmod 600 ~/.ssh/local-rsync-key chmod 600 ~/.ssh/local-apache-key chmod 700 ~/.ssh/ Remote: chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh/ chmod 700 ~/
我在 ~/.ssh/authorized_keys 上註冊了兩個密鑰:
user@localserver apache@localserver
我的想法枯竭了……我想我必須在遠端 /etc/ssh/sshd_config 文件中做其他事情。我在兩台伺服器上都執行 Nginx。謝謝你的幫助。
更新:
雖然我無法獲得 rsync,但這就是我將文件從本地傳輸到遠端的方式:
if($con=ssh2_connect('111.111.11.111',22)) echo 'ok!'; if(ssh2_auth_password($con,'apache','xxxxxx')) echo ' ok!'; if(ssh2_scp_send($con,'localfile','/remotefolder',0755)) echo ' ok!';
本地文件需求:0644 遠端文件夾需求:0775
我還閱讀了以下建議:“我認為您不想“將密鑰複製到 apache 可以訪問它的地方” - 這是違反安全性的。最好將腳本更改為以安全使用者身份執行,然後設置 .ssh伺服器之間無密碼登錄的密鑰。
如果有人知道如何做到這一點,請,這將是很大的幫助。
嘗試
-e "ssh -l user -i <keyfile>"
在命令行上執行時,
ssh
使用 上的密鑰文件$HOME/.ssh/
,但在 PHP 下,它是使用 Apache 的使用者執行的,所以它可能沒有$HOME
; 更不用說$HOME/.ssh/id_dsa
。因此,您要麼明確告訴它要使用哪個密鑰文件,要麼手動創建該目錄及其內容。