Я работаю над сценарием для синхронизации папки из Windows с сервером Linux с помощью Rsync, и мне удается заставить его работать с git bash и исполняемым файлом rsync.
В Centso я добавил syncinguser
к sudoer -> syncinguser ALL=NOPASSWD:/usr/bin/rsync
чтобы разрешить выполнение Rsync, как я могу разрешить тому же пользователю запускать .sh
файл для завершения процесса синхронизации или команду php?
Я хочу синхронизировать приложение Laravel, поэтому мне нужно запустить команду php artisan cache:clear
и php artisan config:cache
после завершения синхронизации.
Я также хотел бы изменить owner:group
лайк chown -R user:psacln *
но меня вполне устраивает тот факт, что права на папки не меняются. Например: разрешение 0777 на общую папку.
Это мой скрипт в Windows:
rsync -rt --chown=user:group (being ignored I think because user's permissions)
--exclude ".env" --exclude "storage" --exclude "public/storage" --progress
--rsync-path="sudo rsync" -e "ssh -p <port>"
'/c/path/to/local/folder/' syncinguser@<ip address>:/remote/path/
как я могу добавить что-то подобное после синхронизации:
ssh yncinguser@<ip address> php artisan cache:clear
ssh syncinguser@<ip address> php artisan config:cache
// OR
ssh syncinguser@<ip address>:/remote/path/to/completesync.sh
где completesync.sh
запустит команду 2 php artisan и рекурсивно применит группу owner: для всех файлов / папок, поскольку когда они приходят из Windows, все они являются root: root
Я не могу подключиться как root, потому что мы заблокировали его, вам нужно подключиться как обычный пользователь, а затем переключиться на root.
ssh -p <ssh port> syncinguser@<IP ADDRESSED> '/path/to/script.sh'
разрешения запрещены, то же самое, если я подключаюсь как обычный пользователь
Итак, вам нужны два сценария: один на исходном компьютере, а другой - на конечном. Скрипт на исходной машине должен выглядеть примерно так:
rsync ... ... ... syncuser@destination:/dest/path
ssh syncuser@destination "sudo /some/path/to/completesync.sh"
И на целевой машине сценарий /some/path/to/completesync.sh
который содержит что-то вроде этого:
#!/bin/sh
php artisan cache:clear
php artisan config:cache
# whatever else you need to run as root
Будьте осторожны, чтобы иметь ограниченные права на этот скрипт:
chown root:root /path/to/completesync.sh && chmod 700 /path/to/completesync.sh
Наконец, измените /etc/sudoers
на конечном компьютере, чтобы "syncuser" мог запускать и rsync, и ваш скрипт от имени пользователя root:
syncuser ALL=NOPASSWD: /usr/bin/rsync, /path/to/completesync.sh
Теперь запуск сценария на исходной машине должен завершить весь процесс за одну операцию.