Мне нужно синхронизировать ресурсы с главного сервера на подчиненный сервер. Я использую rsync, потому что он может рекурсивно синхронизировать папку, используя инкрементный список файлов. Мне удалось упростить работу с помощью ssh-ключей. Все в порядке, но это не работает через php shell_exec функция. Вот что я сделал до сих пор и где я застреваю. Помощь будет оценена!Безопасный способ синхронизации ресурсов между серверами через php/linux
ведущего и ведомого серверов на Ubuntu 14.04.4
Создание папки SSH-ключ в домашнем каталоге пользователя.
mkdir ~/.ssh
chmod 0700 ~/.ssh
Создание частного/открытого ключа 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
Копия открытого ключа на подчиненном сервере (где Я хочу синхронизировать ресурсы)
// 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/
YAY, все работает отлично.
Я вхожу на подчиненный сервер, удаляю папку www/js рекурсивно.
Я вхожу на главном сервере
Я создаю простой PHP скрипт, чтобы проверить, если он работает в качестве «команды оболочки»
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 создает или обновляет ресурсы ressources, а затем синхронизирует их на подчиненных серверах, а php должен продолжать работать. Поэтому синхронизация должна быть запущена с php. – Simmoniz