Назад | Перейти на главную страницу

centos 7 выполняет удаленный скрипт из локального

Я работаю над сценарием для синхронизации папки из 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

Теперь запуск сценария на исходной машине должен завершить весь процесс за одну операцию.