我正在编写一个脚本,使用 Rsync 将文件夹从 Windows 同步到 Linux 服务器,并设法使其与 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 命令并递归应用所有文件/文件夹的所有者:组,因为当它们来自 Windows 时,它们都是 root:root
我无法以 root 身份连接,因为我们阻止了它,您需要以普通用户身份连接,然后切换到 root。
ssh -p <ssh port> syncinguser@<IP ADDRESSED> '/path/to/script.sh'
权限被拒绝,如果我以普通用户身份连接,也会发生同样的情况
答案1
好的,所以您需要两个脚本:一个在源计算机上,另一个在目标计算机上。源计算机上的脚本应类似于:
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”可以以 root 身份运行 rsync 和您的脚本:
syncuser ALL=NOPASSWD: /usr/bin/rsync, /path/to/completesync.sh
现在,在源机器上运行脚本应该可以在一次操作中完成整个过程。