Linux

centos 7 從本地執行遠端腳本

  • June 10, 2019

我正在編寫一個腳本,用 Rsync 將一個文件夾從 Windows 同步到 Linux 伺服器,並且我設法讓它與 git bash 和 rsync 執行檔一起工作。

在 Centso 中,我添加了syncingusersudoer -> syncinguser ALL=NOPASSWD:/usr/bin/rsync允許執行 Rsync,如何允許同一使用者執行.sh文件以完成同步過程或 php 命令?

我想同步一個 Laravel 應用程序,所以我需要在同步完成後php artisan cache:clear執行命令。php 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'

權限被拒絕,如果我以普通使用者身份連接,則相同

好的,所以您需要兩個腳本:一個在源電腦上,另一個在目標電腦上。源機器上的腳本應該是這樣的:

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

現在在源機器上執行腳本應該一次完成整個過程。

引用自:https://serverfault.com/questions/970247