我需要同步從主服務器到從服務器的資源。我使用rsync,因爲它可以使用增量文件列表遞歸地同步文件夾。我已經能夠使用ssh-keys以最簡單的方式工作。一切都很好,但它不能通過php shell_exec函數。這是我迄今爲止所做的,以及我陷入困境的地方。幫助將不勝感激!通過php/linux同步服務器之間的資源的安全方式
主從服務器上的Ubuntu用戶的主目錄中14.04.4
創作中的SSH密鑰文件夾。沒有密碼
ssh-keygen -f ~/.ssh/id_rsa -q -P ""
不確定從屬服務器可以接收主SSH密鑰
// log in slave server
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
複製公鑰到從服務器的私人/公共SSH密鑰的
mkdir ~/.ssh
chmod 0700 ~/.ssh
創建(其中我想同步資源)
// log in master server
su ssh-copy-id -i ~/.ssh/id_rsa.pub [slave user]@[slave host]
現有文件夾的測試同步...讓我們說WWW/JS/
rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ~/www/js/ [slave user]@[slave host]:~/www/js/
耶,一切工作正常。
我登錄從服務器,遞歸地刪除www/js文件夾。
我登錄主服務器上
我創建了一個簡單的PHP腳本來測試它是否內爲「shell命令」
test.php的工作
var_dump(shell_exec('rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ~/www/js/ [slave user]@[slave host]:~/www/js/'));
同步不從PHP工作。可能是因爲php運行寬度www-data用戶?我怎樣才能使它從pĥp安全地工作?
您可以使用rsync,也可以將主目錄存儲在通用文件夾中,並將它們安裝到每臺服務器上。 – mkaatman
您的主變量'〜'可能無法正確擴展。嘗試完整路徑 –
在我的情況下,從服務器就像內容交付。安裝一個通用文件夾可以,但在我的情況下,php創建或更新資源,然後必須在從屬服務器上同步它們,並且php必須繼續運行。因此,必須從php中啓動同步。 – Simmoniz