Выполнение команды оболочки rsync из файла php в веб-браузере

Выполнение команды оболочки rsync из файла php в веб-браузере

Во-первых, мы хотим перенести изменения из одной системы в другую, и для этого у нас есть скрипт оболочки в synchfolders.shфайле, как показано ниже:

rsync -av --delete -e 'sshpass -p Wordpress@123 ssh -p 22' [email protected]:/var/www/html/prosync/wp-content/plugins/ /var/www/html/devsync/wp-content/plugins >> /var/www/html/devsync/wp-content/mysynclog.txt

и мы хотим выполнить этот скрипт оболочки в файле PHP shell_exec()и при выполнении этого файла PHP из браузера, отличного от команды rsync, все выполняется, но rsyncне выполняется. Мы искали материал в SO и получили ссылкуhttps://stackoverflow.com/questions/30772816/php-exec-rsync-ssh-to-remote-server-not-working/30773063#30773063, как сказано здесь, мы попробовали выполнить файл PHP из командной строки и работает отлично, но не через браузер. Почему? Пожалуйста, дайте нам знать, где мы сделали ошибку. Спасибо заранее

решение1

В общем: в скриптах, которые не выполняются из вашей обычной интерактивной оболочки, вам необходимо убедиться, что вы либоиспользуйте абсолютные пути(т.е. /usr/bin/rsyncвместо rsync) илинастроить правильную средус хорошим значением для $PATH


В качестве дополнительного улучшения: вместо аутентификации на основе пароля вам следует настроить аутентификацию SSH на основе ключей для использования в скриптах.

Когда вы перестанете использовать пароли и начнете использовать ключи, вы сможете заблокировать и обезопасить SSH-сервер (отключение аутентификации по паролю остановит атаки методом подбора), и, что еще важнее, вы сможете добавить ограничения на то, что разрешено при использовании определенного ключа для аутентификации, чего нельзя сделать с паролем.

Вы можете ограничить ключ, используемый в вашем скрипте, так, чтобы его можно было использовать только для rsync с определенного хоста.

Тогда даже если ваш скрипт будет скомпрометирован, будет украден не ваш пароль root (который предоставляет полный контроль над вашим сервером), а только закрытый ключ, который предоставляет ограниченный доступ, если его вообще можно будет использовать.

Связанный контент