centos 7 從本地執行遠端腳本
我正在編寫一個腳本,用 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'
權限被拒絕,如果我以普通使用者身份連接,則相同
好的,所以您需要兩個腳本:一個在源電腦上,另一個在目標電腦上。源機器上的腳本應該是這樣的:
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
現在在源機器上執行腳本應該一次完成整個過程。