centos 7 从本地执行远程脚本

centos 7 从本地执行远程脚本

我正在编写一个脚本,使用 Rsync 将文件夹从 Windows 同步到 Linux 服务器,并设法使其与 git bash 和 rsync 可执行文件一起工作。

在 Centso 中,我添加了syncingusersudoer -> syncinguser ALL=NOPASSWD:/usr/bin/rsync允许执行 Rsync,如何允许同一个用户运行.sh文件来完成同步过程或 php 命令?

我想同步 Laravel 应用程序,因此我需要运行命令php artisan cache:clearphp artisan config:cache在同步完成后运行。

我也想改变owner:groupchown -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

现在,在源机器上运行脚本应该可以在一次操作中完成整个过程。

相关内容